应该是what --link is for,至少对于主机名部分来说是这样。
使用docker 1.10, and PR 19242,那就是:
docker network create --net-alias=[]: Add network-scoped alias for the container
(见下文最后一节)
这就是Updating the /etc/hosts file详情
除了环境变量之外,Docker 还将源容器的主机条目添加到 /etc/hosts 文件中。
例如,启动一个 LDAP 服务器:
docker run -t --name openldap -d -p 389:389 larrycai/openldap
并定义一个图像来测试该 LDAP 服务器:
FROM ubuntu
RUN apt-get -y install ldap-utils
RUN touch /root/.bash_aliases
RUN echo "alias lds='ldapsearch -H ldap://internalopenldap -LL -b
ou=Users,dc=openstack,dc=org -D cn=admin,dc=openstack,dc=org -w
password'" > /root/.bash_aliases
ENTRYPOINT bash
您可以使用 --link 在测试映像中将“openldap”容器公开为“internalopenldap”:
docker run -it --rm --name ldp --link openldap:internalopenldap ldaptest
然后,如果您键入“lds”,则该别名将起作用:
ldapsearch -H ldap://internalopenldap ...
那会返回人。意思是internalopenldap 可以从ldaptest 图像正确到达。
当然,docker 1.7 会添加libnetwork,它提供了用于连接容器的原生 Go 实现。请参阅blog post。
它引入了更完整的架构,带有容器网络模型 (CNM)
这将使用新的“network”命令更新 Docker CLI,并记录如何使用“-net”标志将容器分配给网络。
docker 1.10 有一个新部分 Network-scoped alias,现在是 officially documented in network connect:
虽然链接提供了在容器内本地化的私有名称解析,但网络范围的别名为特定网络范围内的任何其他容器通过备用名称发现容器提供了一种方法。
与由服务的消费者定义的链接别名不同,网络范围的别名由向网络提供服务的容器定义。
继续上面的示例,使用网络别名在 isolated_nw 中创建另一个容器。
$ docker run --net=isolated_nw -itd --name=container6 -alias app busybox
8ebe6767c1e0361f27433090060b33200aac054a68476c3be87ef4005eb1df17
--alias=[]
为容器添加网络范围的别名
您可以使用--link 选项将另一个容器链接到首选别名
您可以暂停、重新启动和停止连接到网络的容器。暂停的容器保持连接,并且可以通过网络检查来显示。当容器停止时,它不会出现在网络上,直到你重新启动它。
如果指定,则在重新启动停止的容器时重新应用容器的 IP 地址。如果 IP 地址不再可用,则容器无法启动。
保证 IP 地址可用的一种方法是在创建网络时指定 --ip-range,并从该范围之外选择静态 IP 地址。这样可以确保当该容器不在网络上时,不会将 IP 地址提供给另一个容器。
$ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network
$ docker network connect --ip 172.20.128.2 multi-host-network container2
$ docker network connect --link container1:c1 multi-host-network container2