В моей первой попытке запустить более сложное приложение через Docker я выбрал приложение Symfony Demo и собрал структуру сборки docker для его размещения.
- Первое изображениеэто httpd: он запускается от имени пользователя root (затем возвращается к www-данным) и общается через пользовательскую сеть 'server'.
- Второе изображение - php (fpm): он запускается от имени пользователя root (сбрасывается на www-data)впоследствии), а также общается через пользовательскую сеть «сервер».
- Третье изображение - композитор: оно работает как UID и GID 1000. Его команда точки входа -
composer create-project symfony/symfony-demo symfony-demo
- Все контейнеры совместно используютто же самое связывание, где находится приложение symfony-demo.
Затем я в браузере перехожу на localhost: 8080, чтобы просто получить ошибку Symfony:
The stream or file "/usr/local/apache2/htdocs/symfony-demo/var/log/dev.log" could not be opened: failed to open stream: Permission denied
Дело в том, что упомянутый файл даже не существует в / var / log /.Эта папка пуста.
Все файлы в подключаемом монтировании имеют разрешения 1000: 1000 (UID / GID моего пользователя) и настроены так: -rw-r--r--
.
Я попытался запуститьhttpd и php как: UID 33 (www-data) и GID 33;UID 0 (root) и GID 33 (и наоборот);а также как 1000: 1000 или 1000: 33, но все эти комбинации (при успешном запуске httpd / php) приводят к одной и той же ошибке.
docker-compose.yml:
version: "3"
services:
httpd:
build: "./httpd/"
container_name: "webserver"
depends_on:
- php
ports:
- "8080:80"
networks:
- server
volumes:
- ../app:/usr/local/apache2/htdocs/
php:
build: "./php/"
depends_on:
- composer
container_name: "php"
networks:
- server
volumes:
- ../app:/usr/local/apache2/htdocs/
composer:
build: "./composer/"
container_name: "composer"
user: "1000:1000"
volumes:
- ../app:/usr/local/apache2/htdocs/
networks:
server:
driver: bridge
композитный Dockerfile:
FROM composer:1.8
WORKDIR /usr/local/apache2/htdocs/
CMD ["composer", "create-project", "symfony/symfony-demo", "symfony-demo"]
httpd Dockerfile:
FROM httpd:2.4
COPY ./config/httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./config/httpd-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf
COPY ./config/php-fpm.conf /usr/local/apache2/conf/extra/php-fpm.conf
WORKDIR /usr/local/apache2/htdocs
php Dockerfile:
FROM php:7.3-fpm
RUN cp "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"
COPY ./config/timezone.ini $PHP_INI_DIR/conf.d/
COPY ./config/www.conf /usr/local/etc/php-fpm.d/www.conf
RUN apt-get update && \
apt-get install -y libicu-dev
RUN docker-php-ext-install intl
WORKDIR /usr/local/apache2/htdocs