
org.testifyproject.github.dockerjava.netty.DockerCmdExecFactoryImpl Maven / Gradle / Ivy
package org.testifyproject.testifyproject.github.dockerjava.netty;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.AttachContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.AuthCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.BuildImageCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.CommitCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.ConnectToNetworkCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.ContainerDiffCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.CopyArchiveFromContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.CopyArchiveToContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.CopyFileFromContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.CreateContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.CreateImageCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.CreateNetworkCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.CreateVolumeCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.DisconnectFromNetworkCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.DockerCmdExecFactory;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.EventsCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.ExecCreateCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.ExecStartCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.InfoCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.InspectContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.InspectExecCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.InspectImageCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.InspectNetworkCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.InspectVolumeCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.KillContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.ListContainersCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.ListImagesCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.ListNetworksCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.ListVolumesCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.LogContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.PauseContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.PingCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.PullImageCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.PushImageCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.RemoveContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.RemoveImageCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.RemoveNetworkCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.RemoveVolumeCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.RestartContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.SaveImageCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.SearchImagesCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.StartContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.StatsCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.StopContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.TagImageCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.TopContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.UnpauseContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.UpdateContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.VersionCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.WaitContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.api.org.testifyproject.testifyprojectmand.RenameContainerCmd;
import org.testifyproject.testifyproject.github.dockerjava.core.DockerClientConfig;
import org.testifyproject.testifyproject.github.dockerjava.core.DockerClientImpl;
import org.testifyproject.testifyproject.github.dockerjava.core.LocalDirectorySSLConfig;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.AttachContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.AuthCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.BuildImageCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.CommitCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.ConnectToNetworkCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.ContainerDiffCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.CopyArchiveFromContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.CopyArchiveToContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.CopyFileFromContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.CreateContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.CreateImageCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.CreateNetworkCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.CreateVolumeCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.DisconnectFromNetworkCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.EventsCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.ExecCreateCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.ExecStartCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.InfoCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.InspectContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.InspectExecCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.InspectImageCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.InspectNetworkCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.InspectVolumeCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.KillContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.ListContainersCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.ListImagesCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.ListNetworksCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.ListVolumesCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.LogContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.PauseContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.PingCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.PullImageCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.PushImageCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.RemoveContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.RemoveImageCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.RemoveNetworkCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.RemoveVolumeCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.RestartContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.SaveImageCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.SearchImagesCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.StartContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.StatsCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.StopContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.TagImageCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.TopContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.UnpauseContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.UpdateContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.VersionCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.WaitContainerCmdExec;
import org.testifyproject.testifyproject.github.dockerjava.netty.exec.RenameContainerCmdExec;
import org.testifyproject.testifyproject.netty.bootstrap.Bootstrap;
import org.testifyproject.testifyproject.netty.channel.ChannelInitializer;
import org.testifyproject.testifyproject.netty.channel.EventLoopGroup;
import org.testifyproject.testifyproject.netty.channel.epoll.EpollDomainSocketChannel;
import org.testifyproject.testifyproject.netty.channel.epoll.EpollEventLoopGroup;
import org.testifyproject.testifyproject.netty.channel.nio.NioEventLoopGroup;
import org.testifyproject.testifyproject.netty.channel.socket.DuplexChannel;
import org.testifyproject.testifyproject.netty.channel.socket.SocketChannel;
import org.testifyproject.testifyproject.netty.channel.socket.nio.NioSocketChannel;
import org.testifyproject.testifyproject.netty.channel.unix.DomainSocketAddress;
import org.testifyproject.testifyproject.netty.channel.unix.UnixChannel;
import org.testifyproject.testifyproject.netty.handler.codec.http.HttpClientCodec;
import org.testifyproject.testifyproject.netty.handler.logging.LoggingHandler;
import org.testifyproject.testifyproject.netty.handler.ssl.SslHandler;
import org.testifyproject.testifyproject.netty.util.concurrent.DefaultThreadFactory;
import org.testifyproject.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLParameters;
import java.org.testifyproject.testifyproject.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.security.Security;
import static org.testifyproject.testifyproject.google.org.testifyproject.testifyprojectmon.base.Preconditions.checkNotNull;
/**
* Experimental implementation of {@link DockerCmdExecFactory} that supports http connection hijacking that is needed to pass STDIN to the
* container.
*
* To use it just pass an instance via {@link DockerClientImpl#withDockerCmdExecFactory(DockerCmdExecFactory)}
*
* @see https://docs.docker.org.testifyproject.testifyproject/engine/reference/api/docker_remote_api_v1.21/#attach-to-a-container
* @see https://docs.docker.org.testifyproject.testifyproject/engine/reference/api/docker_remote_api_v1.21/#exec-start
*
*
* @author Marcus Linke
*/
public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory {
private static String threadPrefix = "dockerjava-netty";
/*
* useful links:
*
* http://stackoverflow.org.testifyproject.testifyproject/questions/33296749/netty-connect-to-unix-domain-socket-failed
* http://netty.org.testifyproject.testifyproject/wiki/native-transports.html
* https://github.org.testifyproject.testifyproject/netty/netty/blob/master/example/src/main/java/org.testifyproject.testifyproject/netty/example/http/snoop/HttpSnoopClient.java
* https://github.org.testifyproject.testifyproject/slandelle/netty-request-chunking/blob/master/src/test/java/slandelle/ChunkingTest.java
*/
private DockerClientConfig dockerClientConfig;
private Bootstrap bootstrap;
private EventLoopGroup eventLoopGroup;
private NettyInitializer nettyInitializer;
private SSLContext sslContext = null;
private ChannelProvider channelProvider = new ChannelProvider() {
@Override
public DuplexChannel getChannel() {
DuplexChannel channel = connect();
channel.pipeline().addLast(new LoggingHandler(getClass()));
return channel;
}
};
@Override
public void init(DockerClientConfig dockerClientConfig) {
checkNotNull(dockerClientConfig, "config was not specified");
this.dockerClientConfig = dockerClientConfig;
bootstrap = new Bootstrap();
String scheme = dockerClientConfig.getDockerHost().getScheme();
if ("unix".equals(scheme)) {
nettyInitializer = new UnixDomainSocketInitializer();
} else if ("tcp".equals(scheme)) {
nettyInitializer = new InetSocketInitializer();
}
eventLoopGroup = nettyInitializer.init(bootstrap, dockerClientConfig);
}
private DuplexChannel connect() {
try {
return connect(bootstrap);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
private DuplexChannel connect(final Bootstrap bootstrap) throws InterruptedException {
return nettyInitializer.connect(bootstrap);
}
private interface NettyInitializer {
EventLoopGroup init(final Bootstrap bootstrap, DockerClientConfig dockerClientConfig);
DuplexChannel connect(final Bootstrap bootstrap) throws InterruptedException;
}
private class UnixDomainSocketInitializer implements NettyInitializer {
@Override
public EventLoopGroup init(Bootstrap bootstrap, DockerClientConfig dockerClientConfig) {
EventLoopGroup epollEventLoopGroup = new EpollEventLoopGroup(0, new DefaultThreadFactory(threadPrefix));
bootstrap.group(epollEventLoopGroup).channel(EpollDomainSocketChannel.class)
.handler(new ChannelInitializer() {
@Override
protected void initChannel(final UnixChannel channel) throws Exception {
channel.pipeline().addLast(new HttpClientCodec());
}
});
return epollEventLoopGroup;
}
@Override
public DuplexChannel connect(Bootstrap bootstrap) throws InterruptedException {
return (DuplexChannel) bootstrap.connect(new DomainSocketAddress("/var/run/docker.sock")).sync().channel();
}
}
private class InetSocketInitializer implements NettyInitializer {
@Override
public EventLoopGroup init(Bootstrap bootstrap, final DockerClientConfig dockerClientConfig) {
EventLoopGroup nioEventLoopGroup = new NioEventLoopGroup(0, new DefaultThreadFactory(threadPrefix));
InetAddress addr = InetAddress.getLoopbackAddress();
final SocketAddress proxyAddress = new InetSocketAddress(addr, 8008);
Security.addProvider(new BouncyCastleProvider());
bootstrap.group(nioEventLoopGroup).channel(NioSocketChannel.class)
.handler(new ChannelInitializer() {
@Override
protected void initChannel(final SocketChannel channel) throws Exception {
// channel.pipeline().addLast(new
// HttpProxyHandler(proxyAddress));
channel.pipeline().addLast(new HttpClientCodec());
}
});
return nioEventLoopGroup;
}
@Override
public DuplexChannel connect(Bootstrap bootstrap) throws InterruptedException {
String host = dockerClientConfig.getDockerHost().getHost();
int port = dockerClientConfig.getDockerHost().getPort();
if (port == -1) {
throw new RuntimeException("no port configured for " + host);
}
DuplexChannel channel = (DuplexChannel) bootstrap.connect(host, port).sync().channel();
if (dockerClientConfig.getDockerTlsVerify()) {
final SslHandler ssl = initSsl(dockerClientConfig);
if (ssl != null) {
channel.pipeline().addFirst(ssl);
}
}
return channel;
}
private SslHandler initSsl(DockerClientConfig dockerClientConfig) {
SslHandler ssl = null;
try {
String host = dockerClientConfig.getDockerHost().getHost();
int port = dockerClientConfig.getDockerHost().getPort();
if (sslContext == null) {
sslContext = new LocalDirectorySSLConfig(dockerClientConfig.getDockerCertPath()).getSSLContext();
}
SSLEngine engine = sslContext.createSSLEngine(host, port);
engine.setUseClientMode(true);
engine.setSSLParameters(enableHostNameVerification(engine.getSSLParameters()));
// in the future we may use HostnameVerifier like here:
// https://github.org.testifyproject.testifyproject/AsyncHttpClient/async-http-client/blob/1.8.x/src/main/java/org.testifyproject.testifyproject/ning/http/client/providers/netty/NettyConnectListener.java#L76
ssl = new SslHandler(engine);
} catch (Exception e) {
throw new RuntimeException(e);
}
return ssl;
}
}
protected DockerClientConfig getDockerClientConfig() {
checkNotNull(dockerClientConfig,
"Factor not initialized, dockerClientConfig not set. You probably forgot to call init()!");
return dockerClientConfig;
}
public SSLParameters enableHostNameVerification(SSLParameters sslParameters) {
sslParameters.setEndpointIdentificationAlgorithm("HTTPS");
return sslParameters;
}
@Override
public CopyArchiveFromContainerCmd.Exec createCopyArchiveFromContainerCmdExec() {
return new CopyArchiveFromContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public CopyArchiveToContainerCmd.Exec createCopyArchiveToContainerCmdExec() {
return new CopyArchiveToContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public AuthCmd.Exec createAuthCmdExec() {
return new AuthCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public InfoCmd.Exec createInfoCmdExec() {
return new InfoCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public PingCmd.Exec createPingCmdExec() {
return new PingCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public VersionCmd.Exec createVersionCmdExec() {
return new VersionCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public PullImageCmd.Exec createPullImageCmdExec() {
return new PullImageCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public PushImageCmd.Exec createPushImageCmdExec() {
return new PushImageCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public SaveImageCmd.Exec createSaveImageCmdExec() {
return new SaveImageCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public CreateImageCmd.Exec createCreateImageCmdExec() {
return new CreateImageCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public SearchImagesCmd.Exec createSearchImagesCmdExec() {
return new SearchImagesCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public RemoveImageCmd.Exec createRemoveImageCmdExec() {
return new RemoveImageCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public ListImagesCmd.Exec createListImagesCmdExec() {
return new ListImagesCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public InspectImageCmd.Exec createInspectImageCmdExec() {
return new InspectImageCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public ListContainersCmd.Exec createListContainersCmdExec() {
return new ListContainersCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public CreateContainerCmd.Exec createCreateContainerCmdExec() {
return new CreateContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public StartContainerCmd.Exec createStartContainerCmdExec() {
return new StartContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public InspectContainerCmd.Exec createInspectContainerCmdExec() {
return new InspectContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public ExecCreateCmd.Exec createExecCmdExec() {
return new ExecCreateCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public RemoveContainerCmd.Exec createRemoveContainerCmdExec() {
return new RemoveContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public WaitContainerCmd.Exec createWaitContainerCmdExec() {
return new WaitContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public AttachContainerCmd.Exec createAttachContainerCmdExec() {
return new AttachContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public ExecStartCmd.Exec createExecStartCmdExec() {
return new ExecStartCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public InspectExecCmd.Exec createInspectExecCmdExec() {
return new InspectExecCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public LogContainerCmd.Exec createLogContainerCmdExec() {
return new LogContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public CopyFileFromContainerCmd.Exec createCopyFileFromContainerCmdExec() {
return new CopyFileFromContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public StopContainerCmd.Exec createStopContainerCmdExec() {
return new StopContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public ContainerDiffCmd.Exec createContainerDiffCmdExec() {
return new ContainerDiffCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public KillContainerCmd.Exec createKillContainerCmdExec() {
return new KillContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public UpdateContainerCmd.Exec createUpdateContainerCmdExec() {
return new UpdateContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public RenameContainerCmd.Exec createRenameContainerCmdExec() {
return new RenameContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public RestartContainerCmd.Exec createRestartContainerCmdExec() {
return new RestartContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public CommitCmd.Exec createCommitCmdExec() {
return new CommitCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public BuildImageCmd.Exec createBuildImageCmdExec() {
return new BuildImageCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public TopContainerCmd.Exec createTopContainerCmdExec() {
return new TopContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public TagImageCmd.Exec createTagImageCmdExec() {
return new TagImageCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public PauseContainerCmd.Exec createPauseContainerCmdExec() {
return new PauseContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public UnpauseContainerCmd.Exec createUnpauseContainerCmdExec() {
return new UnpauseContainerCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public EventsCmd.Exec createEventsCmdExec() {
return new EventsCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public StatsCmd.Exec createStatsCmdExec() {
return new StatsCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public CreateVolumeCmd.Exec createCreateVolumeCmdExec() {
return new CreateVolumeCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public InspectVolumeCmd.Exec createInspectVolumeCmdExec() {
return new InspectVolumeCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public RemoveVolumeCmd.Exec createRemoveVolumeCmdExec() {
return new RemoveVolumeCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public ListVolumesCmd.Exec createListVolumesCmdExec() {
return new ListVolumesCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public ListNetworksCmd.Exec createListNetworksCmdExec() {
return new ListNetworksCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public InspectNetworkCmd.Exec createInspectNetworkCmdExec() {
return new InspectNetworkCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public CreateNetworkCmd.Exec createCreateNetworkCmdExec() {
return new CreateNetworkCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() {
return new RemoveNetworkCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec() {
return new ConnectToNetworkCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec() {
return new DisconnectFromNetworkCmdExec(getBaseResource(), getDockerClientConfig());
}
@Override
public void close() throws IOException {
checkNotNull(eventLoopGroup, "Factory not initialized. You probably forgot to call init()!");
eventLoopGroup.shutdownGracefully();
}
@Override
public DockerCmdExecFactory withSSLContext(SSLContext sslContext) {
this.sslContext = sslContext;
return this;
}
private WebTarget getBaseResource() {
return new WebTarget(channelProvider);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy