首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用docker-java创建和启动带有特定端口、分离模式的Docker容器

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

Stack Overflow用户
提问于 2017-03-31 07:51:13
回答 4查看 2.7K关注 0票数 3

我希望使用docker客户端创建和运行docker。我想做这样的事:

代码语言:javascript
复制
docker run -d -p 4444:4444 --name selenium-hub selenium/hub:2.53.0

如何在docker客户机上实现此命令?到目前为止,我的代码如下:

代码语言:javascript
复制
CreateContainerResponse response = dockerClient.createContainerCmd("selenium/hub")
               .withName(name)
               .exec();

实际上,IDK如何指定-d (用于在后台运行)。和-p。请帮帮我。对不起,我是新来的码头工人。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-03-31 11:16:17

找到解决办法..。如果有人找到更好的,请在这里张贴。我已经修改了代码如下:

代码语言:javascript
复制
  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();`
票数 2
EN

Stack Overflow用户

发布于 2019-03-14 17:31:15

Docker-javaVersion3.1.0已经将withPortBindings方法从CreateContainerCmd类移动到HostConfig类。

下面是更新的方法:

代码语言:javascript
复制
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存储库中的单元测试,才能找到如何做到这一点。这似乎是寻找有用的例子的地方。

票数 6
EN

Stack Overflow用户

发布于 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)中看到的内容,您的代码应该如下所示:

代码语言:javascript
复制
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();

据我所知,没有理由在分离模式下显式运行它,因为默认情况下它将异步启动。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43135374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档