0

我使用 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 机器上本地运行容器,一切正常。

4

0 回答 0