#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 /