2016-12-20 1 views
2

У меня есть следующий упрощенный Докер-Compose файл:докер-Compose не обновляет resolv.conf

 
version: '2' 
services: 
    test.base: 
     container_name: test.base 
     image: docker.pnet.ch/r-base:latest 
     restart: on-failure 
     networks: 
      - mynet 
     dns: 192.168.198.2 
     dns_search: 
      - pext.ch 
      - pnet.ch 
networks: 
    mynet: 
     driver: bridge 
     driver_opts: 
      com.docker.network.enable_ipv4: "true" 
     ipam: 
      driver: default 
      config: 
       - subnet: 192.168.198.0/24 
        gateway: 192.168.198.1 

С этим я ожидаю иметь следующие записи в контейнерах /etc/resolv.conf:

 
search pext.ch pnet.ch 
nameserver 192.168.198.2 

Но вместо этого у меня есть следующие:

 
search pext.ch pnet.ch 
nameserver 127.0.0.11 
options ndots:0 

Когда я вручную запустить контейнер с помощью докер запуска с --dns 192.168.199.2 /etc/resolv.conf содержит сервер имен с данным IP-адресом.

Есть ли что-то не так с файлом моей докеры или это ошибка в докере?

Я использую Docker версии 1.10.3 на RHEL и докер-компоновать 1.9.0

ответ

2

сети в Докер Compose формат v2 это different from version 1, и я думаю, что это актуальная проблема. Также вводит в заблуждение, что команда docker run ... работает, а docker-compose ... - нет. Я испытал ту же проблему.

То, что я обнаружил, что Docker Compose v2 создает определяемого пользователь сети для контейнеров, определенных в файле docker-compose.yml, в то время как docker run ... по умолчанию использует мостик сети, названный docker0 на хосте. Кроме того, в пользовательских сетях докер использует embedded DNS server (это 127.0.0.11). Документы говорят:

IP-адреса, передаваемые с помощью опции --dns используется встроенный сервер DNS, чтобы направить запрос DNS, если встроенный сервер DNS не может разрешить запрос разрешения имен из контейнеров. Эти --dns IP-адреса управляются встроенным DNS-сервером, а не будет обновляться в файле /etc/resolv.conf контейнера.

Я думаю, что последняя строка отвечает на ваш вопрос. В любом случае, ваш контейнер должен быть правильно разрешен, не так ли?

+0

У меня такая же проблема. Хотя ожидается, что не будет изменен /etc/resolv.conf, поскольку вы указываете, мой контейнер не будет исправляться должным образом, если я не изменил resolv.conf, как указано в другом ответе. – jotadepicas

1

Я использовал volumes:, чтобы обойти эту проблему. В вашем случае:

version: '2' 
services: 
    test.base: 
     container_name: test.base 
     image: docker.pnet.ch/r-base:latest 
     restart: on-failure 
     networks: 
      - mynet 
     volumes: 
      - ./resolv.conf:/etc/resolv.conf 

Если файл ./resolv.conf содержит то, что именно вы ожидали, как:

search pext.ch pnet.ch 
nameserver 192.168.198.2 

Здесь предполагается, файл resolv.conf находится в той же папке, что и докер-Compose файл.

+1

Я закончил тем же. Я не мог правильно решить проблему, указав dns в docker-compose.yml :( – jotadepicas