我希望使用docker客户端创建和运行docker。我想做这样的事:
docker run -d -p 4444:4444 --name selenium-hub selenium/hub:2.53.0如何在docker客户机上实现此命令?到目前为止,我的代码如下:
CreateContainerResponse response = dockerClient.createContainerCmd("selenium/hub")
.withName(name)
.exec();实际上,IDK如何指定-d (用于在后台运行)。和-p。请帮帮我。对不起,我是新来的码头工人。
发布于 2017-03-31 11:16:17
找到解决办法..。如果有人找到更好的,请在这里张贴。我已经修改了代码如下:
ExposedPort tcp4444 = ExposedPort.tcp(4444);
Ports portBindings = new Ports();
portBindings.bind(tcp4444,Ports.Binding.bindPort(4444));
CreateContainerResponse response = dockerClient.
createContainerCmd("selenium/hub")
.withName(name)
.withImage("selenium/hub:"+version)
.withExposedPorts(tcp4444)
.withPortBindings(portBindings)
.withAttachStderr(false)
.withAttachStdin(false)
.withAttachStdout(false)
.exec();`发布于 2019-03-14 17:31:15
Docker-javaVersion3.1.0已经将withPortBindings方法从CreateContainerCmd类移动到HostConfig类。
下面是更新的方法:
ExposedPort tcp4444 = ExposedPort.tcp(4444);
Ports portBindings = new Ports();
portBindings.bind(tcp4444, Ports.Binding.bindPort(4444));
// create container from image
CreateContainerResponse container = dockerClient.createContainerCmd("selenium/hub:2.53.0")
.withExposedPorts(tcp4444)
.withHostConfig(newHostConfig()
.withPortBindings(portBindings))
.withName("selenium-hub")
.exec();
// start the container
dockerClient.startContainerCmd(container.getId()).exec();顺便提一句,我必须查看docker存储库中的单元测试,才能找到如何做到这一点。这似乎是寻找有用的例子的地方。
发布于 2017-03-31 07:56:51
docker在https://github.com/docker-java/docker-java/wiki上有一个不错的wiki。搜索“港口”给我带来了这个:
创建新的Docker容器,并使用公开的端口启动它 ExposedPort tcp22 = ExposedPort.tcp(22);ExposedPort tcp23 = ExposedPort.tcp(23);端口portBindings =新端口();portBindings.bind(tcp22,Ports.Binding(11022));portBindings.bind(tcp23,Ports.Binding(11023));CreateContainerResponse容器= dockerClient.createContainerCmd("busybox") .withCmd("true") .withExposedPorts(dockerClient.createContainerCmd,tcp23) (#en21 20#)()
我查看了docker中的一些测试,看起来您只完成了运行容器的一半工作,因为您只创建了容器而没有启动它。基于我在这个测试(https://github.com/docker-java/docker-java/blob/069987852c842e3bba85ed3325a8877c36f9e87f/src/test/java/com/github/dockerjava/core/command/ExecStartCmdImplTest.java#L69)中看到的内容,您的代码应该如下所示:
ExposedPort tcp4444 = ExposedPort.tcp(4444);
Ports portBindings = new Ports();
portBindings.bind(tcp4444, Ports.Binding(4444));
// Create the container (it will not be running)
CreateContainerResponse container = dockerClient.createContainerCmd("selenium/hub")
.withName(name)
.withExposedPorts(tcp4444)
.withPortBindings(portBindings)
.exec();
// Actually run the container
dockerClient.startContainerCmd(container).exec();据我所知,没有理由在分离模式下显式运行它,因为默认情况下它将异步启动。
https://stackoverflow.com/questions/43135374
复制相似问题