Добрый вечер.
При запуске контейнера я подменяю 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, результата не добился.