我使用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 droplet)调用container2时导致返回No route to host
。
当我exec
进入container2并运行node process.env.CONTAINER1_PORT_5000_TCP_ADDR
时,它会返回172.17.0.51
。
如果我使用其他用户访问主机,docker inspect container2 | grep "IPAddress"
也会返回172.17.0.52
而不是172.17.0.51
。
为什么Node.js应用程序返回错误的IP地址,而在命令行上运行Node.js会返回不同且正确的IP地址?
更新: 如果我在没有docker-machine和DO的Jenkins机器上本地运行容器,一切正常。