@ioseogio

Как изменить файл hosts в read-only docker nginx контейнере?

Есть докер-контейнер, который прекрасно себя чувствовал на протяжении нескольких месяцев.
После очередного обновления docker, при сборке начал жаловаться, что не может записать адреса в файл hosts, т.к. система read-only.

DOCKERFILE
spoiler
FROM nginx:alpine

RUN echo admin.localhost 127.0.0.1 >> /etc/hosts
RUN echo api.localhost 127.0.0.1 >> /etc/hosts

Процесс сборки
spoiler
D:\Programs\openserver\domains\app>docker-compose up -d --build
Building php
failed to get console mode for stdout: The handle is invalid.
[+] Building 0.2s (11/11) FINISHED
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 417B                                       0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/library/php:7.3-fpm             0.0s
 => [1/7] FROM docker.io/library/php:7.3-fpm                               0.0s
 => CACHED [2/7] RUN docker-php-ext-install pdo_mysql                      0.0s
 => CACHED [3/7] RUN apt-get update -y && apt-get install -y sendmail lib  0.0s
 => CACHED [4/7] RUN apt-get update &&      apt-get install -y          l  0.0s
 => CACHED [5/7] RUN docker-php-ext-install zip                            0.0s
 => CACHED [6/7] RUN docker-php-ext-configure gd --with-png-dir=/usr --wi  0.0s
 => CACHED [7/7] RUN docker-php-ext-install gd                             0.0s
 => exporting to image                                                     0.0s
 => => exporting layers                                                    0.0s
 => => writing image sha256:0aece223026773ece54fb2924e153ea0c0788ae3b8bc8  0.0s
 => => naming to docker.io/library/app_php                                 0.0s
Successfully built 0aece223026773ece54fb2924e153ea0c0788ae3b8bc87b96eb366e80be3d479
Building nginx
failed to get console mode for stdout: The handle is invalid.
[+] Building 0.4s (4/6)
[+] Building 0.4s (5/6)
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 154B                                       0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/library/nginx:alpine            0.0s
 => CACHED [1/3] FROM docker.io/library/nginx:alpine                       0.0s
 => ERROR [2/3] RUN echo admin.localhost 127.0.0.1 >> /etc/hosts           0.3ss]: exit code: 1
------
 > [2/3] RUN echo admin.localhost 127.0.0.1 >> /etc/hosts:
#4 0.259 /bin/sh: can't create /etc/hosts: Read-only file system
------
ERROR: Service 'nginx' failed to build


Что можно сделать? Запустить в режиме выключенным read-only? Махинации с root пользователем и sudo результата не дают.
  • Вопрос задан
  • 1150 просмотров
Решения вопроса 1
Viji
@Viji
Associate DevOps Engineer
Да, последний alpine принес много проблем...

Самое легкое решение использовать не
FROM nginx:alpine
а предыдущию верси из
https://hub.docker.com/_/nginx?tab=tags&page=1&ord...

более сложное решение, не проверял )))
попытаться в docker ENTRYPOINT использовать скрипт, напр script.sh в котором прописать что-то вроде
umount /etc/hosts && echo '127.0.0.1 localhost' > /etc/hosts && your_container_process_or_command
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@teewrew
В read-only системе нельзя изменять файлы. Файл hosts изменяй на целевой системе
Ответ написан
Комментировать
@ioseogio Автор вопроса
В итоге просто выкинул dockerfile, через volume закидываю конфигурацию nginx, в которой указываю несколько виртуальных серверов. Все работает на docker:alphine
Ответ написан
Комментировать
karabanov
@karabanov Куратор тега Ubuntu
Системный администратор
Есть extra_hosts для docker-compose или --add-host если контейнер запускается вручную.

Но, как уже сказали, можно менять /etc/hosts на хостовой машине.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы