我真的很了解这个问题。 当我在Docker中启动3个容器时,它们会获得3个不同的IP地址,这些IP地址按顺序分配,我可以从其他容器中解决它们,一切正常。 但是当我在那些3之前启动一个不同的容器时,3会获得不同的IP地址并且整个设置都会变成地狱。
我一直在纠缠谷歌已经有一段时间了,但我似乎找不到一个合适的(而不是太复杂的)解决方案来有一个稳定的方式连接到某个容器。这并不是说我想自己分配IP,只是为了告诉docker主机“每次容器X启动时,为它分配IP 172.17.0.X” 必须有一些方法,我启动容器的顺序无关紧要,不可能我每次重新启动容器时都必须更改设置。
所以这里有些帮助会很好吗? 我可以通过某种方式将IP分配给容器或为其提供某种别名,我可以从另一个容器中解决这些问题。
答案 0 :(得分:2)
我认为您应该在Docker容器中使用hostname
而不是IP地址。当您运行Docker容器时,您可以在容器之间使用--link
。见https://docs.docker.com/v1.8/userguide/dockerlinks/#communication-across-links
在新版本中,可以轻松地将容器连接在同一网络中。见https://docs.docker.com/engine/userguide/networking/dockernetworks/
答案 1 :(得分:1)
通过ip从容器连接到另一个容器它不是“docker-way”,所以真正正确的方法是使用--link
发布Nguyen Sy Thanh Son。
例如:
docker run --name=db image1
docker run --name=app --link outernamedb:internalname image2
然后在app
容器内使用internalname:3306
但如果您尝试在 app
之前启动db
,它将无效,因为对于这种情况,对于高于1.11的码头工人来说,存在合法的黑客行为。
从docker official docks开始,您可以使用--ip
标志为容器设置精确的IP
docker run --name=db --ip 172.17.0.90 image1
docker run --name=app --ip 172.17.0.91 image2
然后在app
容器内使用172.17.0.90:3306
答案 2 :(得分:1)
使用Docker Networks。链接被弃用,IP地址的东西是疯狂的:)
$ docker network create my-net
$ docker run -d --net my-net --name container1 image1
$ docker run -d --net my-net --name container2 image2
$ docker exec -it container1 sh
# ping container2
PING container2 (172.21.0.3): 56 data bytes
64 bytes from 172.21.0.3: seq=0 ttl=64 time=0.073 ms
...
答案 3 :(得分:1)