如何dynamic地将Docker容器的IP地址映射到另一个容器
我有几个泊坞窗容器在主机上运行。 我有一个场景,我需要将一个容器的IP地址映射到另一个容器中可用的configuration文件。 我知道我可以使用docker inspect [container]命令获取容器的IP地址。 我假设IP地址是每次重新启动容器时dynamic分配的。 所以每次我需要在另一个容器中更改此IP地址。 是否有可能有一个静态IP容器或我可以使用主机的IP地址,而不是容器的IP地址。 我是docker世界的新手。
另外我有一个情况,我需要映射IP地址到另一个主机上运行的容器。 例如,我有一个在HostA和HostB运行的tomcat容器中运行的redis容器。 为了从tomcat与redis通信,我需要在tomcat容器中映射redis的ip地址和端口。 docker工人如何做到这一点?
你可以像在文档中一样运行链接容器 – 链接容器 :
docker run -itd --name=container4 --link container5:c5 image docker run -itd --name=container5 --link container4:c4 image
并通过别名 ping第二个容器(c5)
:
docker attach container4 / # ping -w 4 c5 PING c5 (172.25.0.5): 56 data bytes 64 bytes from 172.25.0.5: seq=0 ttl=64 time=0.070 ms
所以你可以看到有可能用别名 ping第二个容器– 而不是IP地址 。
到你的第二个quiton:如果你有redis
和tomcat
,他们知道彼此的IP地址(因为他们在某个networking中而可以访问),所以这几乎都是关于networking的configuration。
正如Vlado指出的那样,您应该通过主机名访问容器,并允许Dockerpipe理将这些名称映射到IP地址。 在用户定义的networking中 ,这种传统链接和链接有两种select。 这两种描述都值得一读,但是他的段落概括了两种方法(我的重点)
请注意,在创buildcontainer4时,我们链接到了一个名为container5的容器,该容器尚未创build。 这是默认桥接networking中的传统链路与用户定义的networking中的新链路function之间的行为差异之一。 传统链接本质上是静态的,它将容器与别名进行硬绑定,并且不允许链接容器重新启动。 虽然用户定义networking中的新链接function本质上是dynamic的,并且支持链接容器重启,包括容忍链接容器上的IP地址更改。
根据你的下一个问题 ,如果你想在多个主机上运行容器,你可能会想要build立一个覆盖networking 。 那些肯定不支持传统的链接。
官方文档有很好的例子,包括运行什么命令,创build链接和用户定义的networking。
- Dockerfile构build卷更改不反映在已装载的本地文件夹? (OS X / boot2Docker)
- Docker – 启动phpunittesting套件最简单的方法是什么?
- Rails不能replacedatabase.yml中的ENV值
- boot2docker:port forwording通过Mac OS上的Web UI来pipe理火花工作者
- Docker撰写,反应JS应用程序构build,以及如何传递给第一个nginx
- 如何为Redis / RethinkDB指定一个备用公开端口(使用Docker Compose)?
- 在容器之间创build一个variables?
- 需要一些build议dockerizing MongoDB
- Docker连接拒绝悬挂Django