我使用 Docker 机器在 DigitalOcean 上创建了一个 Droplet。
当运行两个容器并从 Jenkins 以这种方式链接它们时:
/bin/bash/eval "$(docker-machine env deployment)"
/bin/bash -c "docker run -d -t --name container1 -p 5000:5000 image1"
/bin/bash -c "docker run -d -t --name container2 -p 5001:5001 --link container1:container1 image2"
然后docker inspect container1 | grep "IPAddress"
我得到172.17.0.51
. 但是,当我在 container2 中运行 Node.js 应用程序时, process.env.CONTAINER1_PORT_5000_TCP_ADDR
它会解析为
172.17.0.7:5000
当我从其公共 IP(DO 液滴的)调用 container2 时导致返回No route to host
.
当我exec
进入 container2 并运行node process.env.CONTAINER1_PORT_5000_TCP_ADDR
它时,它会返回172.17.0.51
.
如果我使用另一个用户 ssh 进入主机,docker inspect container2 | grep "IPAddress"
也会返回172.17.0.52
而不是172.17.0.51
.
为什么 Node.js 应用程序返回错误的 IP 地址,而在命令行上运行 Node.js 返回不同的正确 IP 地址?
更新:如果我在没有 docker-machine 和 DO 的情况下在 Jenkins 机器上本地运行容器,一切正常。