我正在尝试获得以下相当基本的(或我认为)联网设置,以使用Docker 1.9进行工作:
postgres
python
bridge
ping postgres
遵循本教程(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文件中每个容器的条目都等于其 名称 ,该 名称 必须唯一。指定hostname参数不能解决此问题,因为它仅更改容器的 本地 主机名(即它看到的自身)。
etc/hosts
/etc/hosts
hostname
我会对在不依靠在容器上运行DNS服务的情况下执行此操作的方式非常感兴趣。这似乎是一个简单的问题,但不幸的是,我无法找到任何配置选项来更改/etc/hosts文件中容器的名称。
顺便说一句,我希望在网络和容器设置的每个实例中主机名都相同,这样我就无需将主机名动态传递到容器中(例如,告诉Python容器Postgres容器的地址)
编辑 :我对Docker的问题跟踪器进行了一些研究,并且在管道中似乎对此有一个功能:https : //github.com/docker/libnetwork/issues/737
docker 1.10和PR 19242可以帮助:
docker create --net-alias=[]: Add network-scoped alias for the container
docker 1.10新增了一个 网络范围别名 :
链接提供了位于容器内的私有名称解析,而网络范围的别名为特定网络范围内的任何其他容器提供了一种由备用名称发现容器的方式。 与服务的使用者定义的链接别名不同,网络范围的别名是由向网络提供服务的容器定义的。 继续上面的示例,isolated_nw使用网络别名在其中创建另一个容器。
链接提供了位于容器内的私有名称解析,而网络范围的别名为特定网络范围内的任何其他容器提供了一种由备用名称发现容器的方式。 与服务的使用者定义的链接别名不同,网络范围的别名是由向网络提供服务的容器定义的。
继续上面的示例,isolated_nw使用网络别名在其中创建另一个容器。
isolated_nw
$ docker run --net=isolated_nw -itd --name=container6 --net-alias app busybox 8ebe6767c1e0361f27433090060b33200aac054a68476c3be87ef4005eb1df17
现在,让我们使用其他网络范围的别名连接container6到local_alias网络。
container6
local_alias
$ docker network connect --alias scoped-app local_alias container6
container6在本示例中,现在别名为appnetwork isolated_nw和scoped- appnetwork中的别名local_alias。
app
scoped- app