如何使用 docker-java 创建并启动具有特定端口、分离模式的 Docker 容器

Hen*_*one 5 docker docker-java

我想使用 docker java 客户端创建并运行 docker。我想运行这样的东西:

docker run -d -p 4444:4444 --name selenium-hub selenium/hub:2.53.0
Run Code Online (Sandbox Code Playgroud)

如何在docker-java客户端上执行这个命令?到目前为止,这是我的代码:

CreateContainerResponse response = dockerClient.createContainerCmd("selenium/hub")
               .withName(name)
               .exec();
Run Code Online (Sandbox Code Playgroud)

实际上我不知道如何指定 -d (用于在后台运行)。和-p。请帮我。抱歉,我是 Docker 新手。

Noa*_*mon 7

docker-java 3.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();
Run Code Online (Sandbox Code Playgroud)

附带说明一下,我必须查看 docker-java 存储库中的单元测试才能找到如何执行此操作。看来这是寻找工作示例的地方。


Hen*_*one 2

找到了解决方案...如果有人找到更好的解决方案,请在这里发帖。我已经将代码修改为如下所示:

  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();`
Run Code Online (Sandbox Code Playgroud)

  • 看来这又过时了。`withPortBindings` 已从创建容器命令中删除。您有机会知道新语法吗? (2认同)