【发布时间】:2015-11-20 20:23:08
【问题描述】:
我正在尝试使用 Docker 1.9 获得以下非常基本的(或者我认为的)网络设置:
- 我有多个运行服务的容器,例如一个
postgres容器和一个python容器(可能不止两个)。 - 这些容器通过
bridge网络相互连接。 - 我希望它们可以使用唯一的主机名进行寻址(即 Python 容器应该能够通过
ping postgres对 Postgres 容器执行 ping 操作)。
按照教程 (https://docs.docker.com/engine/userguide/networking/dockernetworks/),我可以使用以下命令序列来实现:
#create the containers
docker run -itd --name container1 busybox
docker run -itd --name container2 busybox
#create the network
docker network create test
docker network connect test container1
docker network connect test container2
这工作得很好,Docker 正确地将etc/hosts 中的条目设置为指向正确的 IP 地址。但是,我也希望能够同时运行该设置的多个实例(即容器 + 网络)。这不起作用,因为/etc/hosts 文件中每个容器的条目都等于它的name,它需要是唯一的。指定 hostname 参数并不能解决此问题,因为它只会更改容器的 local 主机名(即它自己看到的主机名)。
我会非常感兴趣的一种方法来做到这一点,而无需求助于在容器上运行 DNS 服务。这似乎是一个简单的问题,但不幸的是我在/etc/hosts 文件中找不到任何配置选项来更改容器的名称。
顺便说一句,我希望主机名在我的网络+容器设置的每个实例中都相同,这样我就不需要将主机名动态传递到容器中(例如,告诉 Python 容器 Postgres 容器的地址)
编辑:我对 Docker 的问题跟踪器做了一些研究,似乎有一个功能正在筹备中:https://github.com/docker/libnetwork/issues/737
【问题讨论】:
-
这是一个非常重要的问题:
--link <name or id>:alias("Legacy links") 允许您在两个容器之间定义一个“别名”(由同一个 docker 守护进程管理)。该别名可以被不同的docker run重用,允许每个容器看到自己的别名链接容器(具有相同的别名)。我没有发现新的 libnetwork 具有相同的功能。 -
是的,我也读到过这个,在 1.9 中找不到类似的功能
标签: docker