Docker端口绑定未按预期工作

时间:2017-05-16 22:02:33

标签: docker

在容器中运行Jenkins映像,该映像绑定到主机端口9090

sudo docker run -itd -p 9090:8080 -p 50000:50000 --name=myjenkins -t jenkins-custom /bin/bash

运行$docker port myjenkins

的输出
50000/tcp -> 0.0.0.0:50000
8080/tcp -> 0.0.0.0:9090

我还可以从主机视角ps -Af | grep proxy

看到绑定
root     15314 15194  0 17:52 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 50000 -container-ip 172.17.0.2 -container-port 50000
root     15325 15194  0 17:52 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 9090 -container-ip 172.17.0.2 -container-port 8080

启动jenkins服务器后,我尝试使用主机IP和转发端口(9090)连接到容器。

我是Docker的新手,所以可能错过了一些东西,但会很感激建议

更新:包括dockerfile

From local-artifiactory/jenkinsci/jenkins:2.9
ENV java_opts="-Xmx8192m"

3 个答案:

答案 0 :(得分:1)

这不是这个特定问题的答案。这是“端口映射不起作用”的可能答案

我已经被这两次抓住了。

从命令行创建容器时,图像名称必须放在最后

这个语法:

docker run --name MyContainer MyImage -p 8080:80

将从 MyContainer 创建容器 MyImage 没有问题

但是 -p 8080:80 部分将被静默忽略并且您的端口映射将不起作用

此语法将起作用 - 除了端口映射实际起作用之外,您将看到完全相同的结果。

docker run --name MyContainer -p 8080:80 MyImage

同样如此:

docker run MyImage --name MyContainer

这将从 MyImage 创建一个容器,但它不会给它明确的名称,它会分配一个随机名称

我希望这可以为某人节省一些时间。

答案 1 :(得分:0)

问题是这些端口没有运行任何服务。唯一运行的进程是/ bin / bash(在行尾指定)。你必须在容器内启动Jenkins。

答案 2 :(得分:0)

泊坞窗中的端口绑定/发布实际上是将容器的端口发布到docker-machine的端口,而不是本地主机的端口。例如,使用
docker run -p 9090:8080 jenkins
您将可以通过curl <your-docker-machine>:9090而不是curl localhost:9090curl 127.0.0.1:9090来访问服务
要获取您的docker-machine的IP,请执行以下操作:docker-machine ls并检查URL