Неможливо записати в / etc / hosts файл з Dockerfile за допомогою RUN


9

Я створюю зображення докера за допомогою досить простого Dockerfile. Всередині Dockerfile у мене є така команда:

RUN printf "192.92.13.243 www.hahaha.com \n" >> /etc/hosts

Сама команда здається нормальною, оскільки створення образу на цьому етапі не зупиняється.

Проблема полягає в наступному: Під час запуску зображення рядка, який повинен бути вставлений всередину "/ etc / hosts", немає.

Тепер я провів обшук і дізнався, що до версії 1.2 докера виникла проблема з файлом хостів всередині контейнерів. У моєму випадку я використовую версію 1.5, останню станом на цей момент.

Я щось пропускаю?

ОНОВЛЕННЯ 1:

Для цього, як видається, існує багато питань, як відкритих, так і закритих, на сторінках github докера.

Відповіді:


12

Це працює на docker 1.7.0

RUN echo "192.168.11.112 myhost" >> /etc/hosts && wget http://myhost

Трюк полягає в тому, щоб додати ім'я хоста до того ж рядка, що ви його використовуєте, інакше файл хостів буде скинутий, оскільки кожна команда RUN запускає новий проміжний контейнер. Наприклад, це не буде працювати :

RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost

1
Дякую за розуміння! Хоча це правильно (я перевірив) і загалом корисний, в цьому випадку мені це не корисно. Мені потрібен файл "hosts", який потрібно заповнити, коли контейнер працює.
dlyk1988

2
+1 для запуску команд у тому ж рядку
myol

7

Після написання оновлення до мого запитання я вирішив ще раз поглянути на "питання", відкриті в github. Виявляється, було реалізовано рішення:

docker run ... --add-host='server:0.0.0.0' ...

Використовуючи аргумент "--add-host ..." при запуску контейнера, можна змінити файл хостів.


5
Я хочу, щоб це могли зробити в побудові. Людина, що працює з контейнером, не повинна знати про внутрішніх хостів. Створює нульовий сенс!
samsamm777

Я лунаю @ samsamm777. Задумаєтесь, чи є хороший спосіб зробити це?
Джонатан

Це дійсно дуже дивна поведінка, яка ніколи не є хорошою ідеєю в ІТ-системах.
Torsten Bronger
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.