Недавно я учился создавать образы и контейнеры с помощью Docker. Я был довольно уверен в этом при использовании Mac, но недавно перешел на Ubuntu, я довольно новичок в этой части разработки.
В качестве «кода» я использую новый стандартный проект Laravel, и в настоящее время я использую только php-контейнер и nginx-контейнер.
Я использую файл docker-compose.yml
для создания своих контейнеров:
version: "3.1"
services:
nginx:
image: nginx:latest
volumes:
- ./code:/var/www
- ./nginx_conf.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
php:
image: php:7.3-fpm
ports:
- 9000
volumes:
- ./code:/var/www
В приведенном выше коде может быть или не быть ошибкой только потому, что я просто напечатал его, а не скопировал и вставил - но он работает на моей машине.
Проблема:
php-fpm настроен с --with-fpm-user=www-data
и --with-fpm-group=www-data
, и это установлено в php:7.3-fpm
Dockerfile (см. Здесь) .
Файлы на моем хост-компьютере сохраняются с моим именем пользователя и группой как владелец / группа.
- Когда я захожу в контейнер, файлы принадлежат 1000 и группе 1000 (я предполагаю сопоставление моей учетной записи пользователя и группы на хост-компьютере?)
Однако, когда я получаю доступ к приложению через браузер, я получаю сообщение об ошибке отказа в разрешении при запуске (когда Laravel пытается создать файл журнала ошибок в хранилище). Я думаю, это потому, что php-fpm
работает как www-data, но каталог хранения имеет разрешения drwxr-xr-x
для владельца / группы. Phil: phil - мой владелец и группа хоста.
После нескольких часов поисков в Google и испытаний я попробовал следующее:
Рекурсивно измените владельца и группу каталога кодов на хост-компьютере на www-data:www-data
. Это позволяет приложению Laravel работать, но теперь я не могу создавать или редактировать файлы etc на хосте, используя PHPStorm, потому что каталог доступен только для чтения (я полагаю, потому что phpstorm работает как мой пользователь, а каталог принадлежит другому пользователю / группа).
Я добавил свою учетную запись пользователя хоста в группу www-data
и предоставил ей write
разрешения, используя sudo chmod -R g+w ./code
, что теперь позволяет приложению запускать приложение и писать phpstorm , выполняйте и т. д. файлы, но когда я создаю или редактирую файл, владелец файлов и группа меняются обратно на мой хост phil:phil
, и я предполагаю, что это снова сломает приложение.
Я попытался создать образ php и настроить env (как описано в ссылке выше) для настройки на --with-fpm-user=phil --with-fpm-group=phil
, но после сборки он ничего не меняет - он все еще работает с www-data (после прочтения проблемы с github я думаю, что это потому, что envs не может быть изменен до позднего времени, в какой момент php уже настроен?) (см. здесь проблему github)
У меня заканчиваются идеи, чтобы попробовать. Единственное, о чем я могу думать, это рекурсивно установить владельца и группу каталога кода на моем хосте на www-data
и попробовать вместо этого запустить phpstorm как www-data
, но это странно (Обновление: я пытался открыть phpstorm как Пользователь www-data, использующий sudo -u www-data phpstorm.sh
, но я получаю исключение java - что-то связанное с графикой - так что этот подход также невозможен)
Теперь единственное, что я могу придумать, - это создать новое изображение php из базового образа alpine и полностью обойти изображения php - что кажется огромным неудобством только потому, что сопровождающие хотят использовать ENV
вместо ARG
Я не уверен в лучшей практике для этого сценария. Должен ли я пытаться изменить способ запуска php-fpm (пользователь / группа)? я должен обновлять владельца / группу каталогов на моем хосте? я должен запускать phpstorm от имени другого пользователя?
Буквально любой совет будет с благодарностью.