Docker 端口绑定未按预期工作

cdu*_*gan 6 docker

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

sudo docker run -itd -p 9090:8080 -p 50000:50000 --name=myjenkins -t jenkins-custom /bin/bash
Run Code Online (Sandbox Code Playgroud)

运行的输出$docker port myjenkins

50000/tcp -> 0.0.0.0:50000
8080/tcp -> 0.0.0.0:9090
Run Code Online (Sandbox Code Playgroud)

我还可以从主机角度看到绑定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
Run Code Online (Sandbox Code Playgroud)

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

我是 Docker 新手,所以可能错过了一些东西,但希望得到建议

更新:包括 dockerfile

From local-artifiactory/jenkinsci/jenkins:2.9
ENV java_opts="-Xmx8192m"
Run Code Online (Sandbox Code Playgroud)

Nic*_*aid 25

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

我已经被这个问题抓住过两次了。

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

这个语法:

docker run --name MyContainer MyImage -p 8080:80
Run Code Online (Sandbox Code Playgroud)

将毫无问题MyContainer地创建容器MyImage

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

此语法将起作用 - 您将看到完全相同的结果,只是端口映射实际上起作用。

docker run --name MyContainer -p 8080:80 MyImage
Run Code Online (Sandbox Code Playgroud)

与此相同:

docker run MyImage --name MyContainer
Run Code Online (Sandbox Code Playgroud)

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

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

  • 天哪,我花了好几个小时试图解决这个问题! (3认同)