docker-撰写不将主机名添加到 /etc/hosts
docker-compose not adding hostname to /etc/hosts
我正在开发一个 docker-compose 配置,它应该启动一个连接到 dnsmasq 容器的 openvpn 容器。 openvpn 服务器应该自动发现 dnsmasq 容器并将其用作 dns 服务器。通过在 /etc/hosts 文件中搜索条目 "dnsmasq" 来完成发现。
我有以下 docker-compose.yml 文件:
version: '2'
services:
data:
build: ./
dnsmasq:
cap_add:
- NET_ADMIN
hostname: dnsmasq
image: <dnsmasq image>
ports:
- 53:53/udp
restart: always
openvpn:
cap_add:
- NET_ADMIN
depends_on:
- data
- dnsmasq
image: <openvpn image>
ports:
- 1194:1194/udp
restart: always
volumes_from:
- data
我已将 "dnsmasq" 指定为 dnsmasq 容器的主机名,并希望它出现在 openvpn 容器的“/etc/hosts”中。这似乎没有发生。
这是 openvpn 容器中 /etc/hosts 的转储:
openvpn_1 | 127.0.0.1 localhost
openvpn_1 | ::1 localhost ip6-localhost ip6-loopback
openvpn_1 | fe00::0 ip6-localnet
openvpn_1 | ff00::0 ip6-mcastprefix
openvpn_1 | ff02::1 ip6-allnodes
openvpn_1 | ff02::2 ip6-allrouters
openvpn_1 | 172.19.0.4 d44a72f42ef9
我希望 d44a72f42ef9 为 "dnsmasq"。
我做错了什么?
我是 运行 docker-compose 1.8.1.
显然,主机文件没有得到更新。主机 "dnsmasq" 仅可使用其他一些不同的机制。这可以使用以下方法验证:
ping -c1 dnsmasq
首先,您需要向 docker-compose.yml
添加一个 "links" 密钥,如下所示:
services:
dnsmasq:
...
openvpn:
...
links:
- dnsmasq
此主机名的 DNS 解析不是通过 /etc/hosts
处理的,而是通过 Docker Embedded DNS 处理的。您可以使用普通的 DNS 工具查询它,如下所示:
$ getent hosts dnsmasq
$ nslookup dnsmasq
$ dig dnsmasq A
$ # etc...
docker 中的旧版本链接通过添加到 /etc/hosts 来工作。您的系统很可能最初是在这种模式下设置的,其中检索容器分辨率的方式内置于 /etc/hosts.
但是 docker 的较新版本不需要这个。只要容器在同一个网络上,它们就会自动允许服务名称解析。因此您可以通过以下方式访问它:
http://dnsmasq:port
我正在开发一个 docker-compose 配置,它应该启动一个连接到 dnsmasq 容器的 openvpn 容器。 openvpn 服务器应该自动发现 dnsmasq 容器并将其用作 dns 服务器。通过在 /etc/hosts 文件中搜索条目 "dnsmasq" 来完成发现。
我有以下 docker-compose.yml 文件:
version: '2'
services:
data:
build: ./
dnsmasq:
cap_add:
- NET_ADMIN
hostname: dnsmasq
image: <dnsmasq image>
ports:
- 53:53/udp
restart: always
openvpn:
cap_add:
- NET_ADMIN
depends_on:
- data
- dnsmasq
image: <openvpn image>
ports:
- 1194:1194/udp
restart: always
volumes_from:
- data
我已将 "dnsmasq" 指定为 dnsmasq 容器的主机名,并希望它出现在 openvpn 容器的“/etc/hosts”中。这似乎没有发生。
这是 openvpn 容器中 /etc/hosts 的转储:
openvpn_1 | 127.0.0.1 localhost
openvpn_1 | ::1 localhost ip6-localhost ip6-loopback
openvpn_1 | fe00::0 ip6-localnet
openvpn_1 | ff00::0 ip6-mcastprefix
openvpn_1 | ff02::1 ip6-allnodes
openvpn_1 | ff02::2 ip6-allrouters
openvpn_1 | 172.19.0.4 d44a72f42ef9
我希望 d44a72f42ef9 为 "dnsmasq"。
我做错了什么?
我是 运行 docker-compose 1.8.1.
显然,主机文件没有得到更新。主机 "dnsmasq" 仅可使用其他一些不同的机制。这可以使用以下方法验证:
ping -c1 dnsmasq
首先,您需要向 docker-compose.yml
添加一个 "links" 密钥,如下所示:
services:
dnsmasq:
...
openvpn:
...
links:
- dnsmasq
此主机名的 DNS 解析不是通过 /etc/hosts
处理的,而是通过 Docker Embedded DNS 处理的。您可以使用普通的 DNS 工具查询它,如下所示:
$ getent hosts dnsmasq
$ nslookup dnsmasq
$ dig dnsmasq A
$ # etc...
docker 中的旧版本链接通过添加到 /etc/hosts 来工作。您的系统很可能最初是在这种模式下设置的,其中检索容器分辨率的方式内置于 /etc/hosts.
但是 docker 的较新版本不需要这个。只要容器在同一个网络上,它们就会自动允许服务名称解析。因此您可以通过以下方式访问它:
http://dnsmasq:port