배포된 다중 컨테이너 Docker 애플리케이션에는 docker-compose
PHP-FPM을 실행하는 알파인에서 빌드된 컨테이너가 있습니다. 이 컨테이너는 Nginx 컨테이너에 PHP를 제공하고 PHP 스크립트를 실행하는 데 사용됩니다.컨테이너에CLI 명령에서호스트에서. FPM이 사용자(UID 1000) 및 그룹(GID 1000)을 사용하도록 구성되었더라도 호스트의 CLI 명령에서 실행될 때 PHP에서 생성된 파일은 root
(UID 0)이 소유하고 그룹(GID 0)을 갖습니다.root
www-data
www-data
Dockerfile의 관련 부분은 다음과 같습니다.
FROM php:7.4-fpm-alpine
RUN echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories
RUN apk --no-cache add shadow && usermod -u 1000 www-data && groupmod -g 1000 www-data
RUN chown -R www-data:www-data /var/www/html
구성은 다음과 같습니다.
$ docker-compose exec php grep -E "user|group" /usr/local/etc/php-fpm.d/www.conf
user = www-data
group = www-data
$ docker-compose exec php grep www-data /etc/passwd
www-data:x:1000:1000:Linux User,,,:/home/www-data:/sbin/nologin
다음은 세분화된 문제에 대한 데모입니다.
$ docker-compose exec php ./artisan make:model Foo -m
Model created successfully.
Created Migration: 2020_09_25_051836_create_foos_table
$ docker-compose exec php ls -ln /var/www/html/database/migrations/2020_09_25_051836_create_foos_table.php
-rw-r--r-- 1 0 0 571 Sep 25 05:18 /var/www/html/database/migrations/2020_09_25_051836_create_foos_table.php
env UID=1000 GID=1000
또한 일부 포럼에서 제안한 대로 실행 명령 앞에 접두사를 붙여 보았지만 아무런 효과가 없었습니다. CLI 인터프리터( /usr/local/bin/php
)가 뒤에서 FPM을 사용하지 않을 수 있다는 점을 고려하여 관련성이 있을 수 있는 PHP 구성을 확인하려고 시도했지만 아무 것도 발견되지 않았습니다.
$ docker-compose exec php grep -rvE "^; " /etc/php7/ | grep "user\|group"
/etc/php7/php.ini:;user_ini.filename = ".user.ini"
/etc/php7/php.ini:;user_ini.filename =
/etc/php7/php.ini:;user_ini.cache_ttl = 300
/etc/php7/php.ini:;ignore_user_abort = On
/etc/php7/php.ini:;syslog.facility = user
/etc/php7/php.ini:user_dir =
/etc/php7/php.ini:;user_agent="PHP"
/etc/php7/php.ini:;odbc.default_user = Not yet implemented
/etc/php7/php.ini:;ibase.default_user =
/etc/php7/php.ini:mysqli.default_user =
www-data
사용자 (예: UID 1000) 로 파일에 쓰도록 PHP를 구성하려면 어떻게 해야 합니까 ?
답변1
docker compose yml 파일에서 "user"를 사용하고 userid:groupid를 지정할 수 있습니다.
user: "1000:1000"