slo_nik
@slo_nik

Как при запуске контейнера сделать запись в /etc/hosts?

Добрый вечер.

При запуске контейнера я подменяю docker-php-entrypoint.sh.
В файле есть код, который записывает в /etc/hosts ip host.docker.internal

#!/bin/sh
set -e

HOST_DOMAIN="host.docker.internal"
if ! ping -q -c1 $HOST_DOMAIN > /dev/null 2>&1
then
  HOST_IP=$(ip route | awk 'NR==1 {print $3}')
  # shellcheck disable=SC2039
  echo -e "$HOST_IP\t$HOST_DOMAIN" >> /etc/hosts
fi

# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
	set -- php-fpm "$@"
fi

exec "$@"


Также меняю пользователя от которого запускается контейнер с root на app

FROM php:8.1-cli-alpine

....................................

COPY ./common/entrypoint.sh /usr/local/bin/docker-php-entrypoint
RUN chmod +x /usr/local/bin/docker-php-entrypoint

RUN addgroup -g 1000 app && adduser -u 1000 -G app -s /bin/sh -D app

WORKDIR /app

USER app


В docker-compose.yml

php-cli:
    build:
      context: ./project/docker
      dockerfile: development/php-cli/Dockerfile
    volumes:
      - ./project:/app


Запуск контейнера завершается ошибкой "Permission denied"

В общем то понятно, что пользователь app не имеет прав на запись в /etc/hosts.

Как можно решить эту проблему, чтобы контейнер запускался от app, но при этом можно было сделать запись в /etc/hosts?

Пробовал запустить docker-php-entrypoint через RUN сразу после установки прав на исполнение и перед созданием пользователя app - ошибка "Read-only file system".
Пытался использовать su в docker-php-entrypoint, результата не добился.
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы