docker-compose不将主机名添加到/ etc / hosts

时间:2016-10-22 13:56:34

标签: networking docker docker-compose openvpn dnsmasq

我正在使用一个docker-compose配置,它应该启动一个连接到dnsmasq容器的openvpn容器。 openvpn服务器应该自动发现dnsmasq容器并将其用作dns服务器。通过在/ etc / hosts文件中搜索条目“dnsmasq”来完成发现。

我有以下docker-compose.yml文件:

<div style="text-align: center">this text should be in center of view</div>

我已将“dnsmasq”指定为dnsmasq容器的主机名,并期望它出现在openvpn容器中的“/ etc / hosts”中。这似乎不会发生。

这是来自openvpn容器中/ etc / hosts的转储:

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

我希望d44a72f42ef9是“dnsmasq”。

我做错了什么?

我正在运行docker-compose 1.8.1。

3 个答案:

答案 0 :(得分:4)

docker中较旧版本的链接通过添加到/ etc / hosts来工作。您可能最初在此范例下设置了系统,其中检索容器解析的方法已内置到/ etc / hosts中。

较新版本的docker不需要此功能。只要容器位于同一网络上,它们就会自动允许服务名称解析。所以你可以通过以下方式访问它:

http://dnsmasq:port

答案 1 :(得分:1)

首先,您需要为docker-compose.yml添加“链接”键,如下所示:

services:
  dnsmasq:
    ...
  openvpn:
    ...
    links:
      - dnsmasq

此主机名的DNS解析不是通过/etc/hosts处理,而是通过Docker Embedded DNS处理。您可以使用常规DNS工具进行查询,如下所示:

$ getent hosts dnsmasq
$ nslookup dnsmasq
$ dig dnsmasq A
$ # etc...

答案 2 :(得分:0)

显然,hosts文件没有得到更新。主持人&#34; dnsmasq&#34;只是使用其他一些不同的机制。这可以通过以下方式验证:

ping -c1 dnsmasq