Подтвердить что ты не робот

Как я могу сделать /etc/hosts доступными для записи root в контейнере Docker?

Я новичок в использовании докеров и настраиваю контейнер.
Я не могу редактировать /etc/hosts (но мне нужно какое-то программное обеспечение, которое я разрабатываю). Автоматическое редактирование (через sudo или root) файла указывает его на файловую систему только для чтения. Ручное (vim) редактирование файла говорит о его только для чтения, и я не могу сохранить изменения с правами root (разрешения для файлов - rw для владельца (root)).

Однако я могу изменить другие файлы и добавить файлы в /etc.

Есть ли причина для этого?

Можно ли изменить конфигурацию Docker, чтобы разрешить редактирование /etc/hosts?

спасибо

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ 2014-09

См. ответ @Thomas:

/etc/hosts теперь доступен для записи с Docker 1.2.

Оригинальный ответ

Вы можете использовать этот взлом тем временем

https://unix.stackexchange.com/questions/57459/how-can-i-override-the-etc-hosts-file-at-user-level

В вашем файле Docker:


ADD your_hosts_file /tmp/hosts
RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-override
RUN perl -pi -e 's:/etc/hosts:/tmp/hosts:g' /lib-override/libnss_files.so.2
ENV LD_LIBRARY_PATH /lib-override

Ответ 2

/etc/hosts теперь доступен для записи с Docker 1.2.

Из блога Docker:

Обратите внимание, что изменения этих файлов не сохраняются во время docker build и поэтому не будет сохранено в полученном изображении. изменения будут только "вставляться" в запущенный контейнер.

Ответ 3

В настоящее время это техническое ограничение Docker, и далее рассматривается в https://github.com/dotcloud/docker/issues/2267.

В конечном итоге он будет снят.

Теперь вам нужно обойти это, например. используя пользовательский dnsmasq сервер.

Ответ 4

Я недавно наткнулся на необходимость добавить запись в файл /etc/hosts (чтобы сделать работу sendmail).

В итоге я стал частью объявления Dockerfile CMD следующим образом:

CMD echo "127.0.0.1 noreply.example.com $(hostname)" >> /etc/hosts \
    && sendmailconfig \
    && cron -f

Таким образом, он фактически не является частью изображения, но он всегда доступен после создания контейнера из изображения.