Docker с новым сервером имен

#python #docker

#docker #dockerfile

Вопрос:

Как я могу добавить новый сервер имен в /etc/resolv.conf (dockerfile)?

В моем dockerfile я использую:

 FROM ubuntu:14.04

RUN echo "nameserver 10.111.122.1" >> /etc/resolv.conf
  

В моем тесте я использую:

 docker run --rm 746cb98d6c9b echo cat /etc/resolv.conf
  

Я не получил свое изменение (новый сервер имен)… Поэтому я пытаюсь добавить mannualy с

 docker run --rm 746cb98d6c9b echo "nameserver 10.111.122.1" >> /etc/resolv.conf 
  

и я получаю

 zsh: permission denied: /etc/resolv.conf
  

Как я могу изменить разрешение этого файла или использовать пользователя root ИЛИ использовать chmod в файлах docker? Моя реальная задача — добавить и DNS-сервер для моей сборки этого dockerfile.

Я использую Linux mint.

Я получаю правильный результат с помощью теста ping в команде запуска docker (с --dns )

Ответ №1:

Итак, один из способов добавить новую информацию DNS в процесс сборки вашего контейнера — это добавить некоторые параметры запуска в ваш демон Docker. Документация для этого процесса показывает, что вы будете использовать опцию --dns . Расположение вашего файла конфигурации зависит от вашего конкретного дистрибутива. На моей машине Linux Mint файл находится внутри /etc/default/docker . В Linux Mint найдите DOCKER_OPTS= строку и добавьте в нее соответствующие --dns=x.x.x.x записи.

Например, если вы хотите использовать DNS от Google, вам следует изменить эту строку, чтобы она выглядела следующим образом:

 DOCKER_OPTS="--dns=8.8.4.4 --dns=8.8.8.8"
  

Кроме того, при отсутствии --dns --dns-search параметров запуска или Docker будет использовать /etc/resolv.conf вместо хоста, на котором он запущен.

Ответ №2:

Конфигурация DNS контейнера Docker может быть скорректирована во время создания контейнера, и ее не нужно жестко кодировать в самом образе Docker.

Передача одного DNS-сервера в контейнер выполняется путем предоставления --dns параметра:

 $ docker run --rm --dns=8.8.8.8 <image>
  

Вы можете предоставить несколько DNS-серверов, а также определить другие параметры, связанные с DNS, такие как имя поиска DNS или общие параметры DNS:

 $ docker run --rm --dns=8.8.8.8 --dns=8.8.4.4 --dns-search=your.search.domain --dns-opt=timeout:50 <image>
  

Если вы передадите cat /etc/resolv.conf команду as своему контейнеру, вы можете легко проверить, что переданные параметры конфигурации DNS вошли в конфигурацию DNS контейнера:

 $ docker run --rm --dns=8.8.4.4 --dns=8.8.8.8 --dns-search=your.domain.name --dns-opt=timeout:50 alpine cat /etc/resolv.conf

search your.domain.name
nameserver 8.8.4.4
nameserver 8.8.8.8
options timeout:50
  

Пожалуйста, также ознакомьтесь с docker run конфигурацией, которую можно найти по адресу https://docs.docker.com/engine/reference/commandline/run /