在Manjaro Linux上,使用相同的Docker配置和php应用程序,我对php能够写入文件没有任何问题。在我的Manjaro框中,当我docker exec -ti my_php_container sh
和ls -la
我的php应用程序文件有权限1000:1000
。
但是,在我的Ubuntu 22.04盒子上,当构建docker容器,然后检查容器中的php应用程序文件时,它们的权限是root:root
。当php应用程序加载时,所有写功能都被拒绝。PHP is_writable($path)
总是返回false,即使chmod 775
目录正确。因此,罪魁祸首似乎是Docker没有在容器中正确设置权限。
我的UID和GID在我的Ubuntu盒子上都是1000。这是我目前的设置。我很困惑,Docker通常只是工作,但在我的新Ubuntu框权限被拒绝。为什么容器中的文件不属于1000:1000,即使我创建了这个用户并传入了user
数据?
Docker版本23.0.5。注意:我可以运行docker rootless,例如我可以运行docker run hello-world
没有问题。当我打开这个php应用程序时,我没有使用sudo,它没有任何错误。Manjaro和Ubuntu都使用相同的Docker版本。
Dockerfile
FROM php:8.1.8-fpm-alpine
ARG UID
ARG GID
ENV UID=${UID}
ENV GID=${GID}
RUN addgroup -g ${GID} --system myname
RUN adduser -G myname --system -D -s /bin/sh -u ${UID} myname
www.conf
[www]
user = myname
group = myname
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 100
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
docker-compose.yml
php:
container_name: my_php_container
image: php:8.1.8-fpm
build:
dockerfile: Dockerfile
context: ./server/php-fpm
args:
- UID=${UID:-1000}
- GID=${GID:-1000}
user:
"${UID:-1000}:${GID:-1000}"
environment:
XDEBUG_SESSION: docker
CI_ENV: development
volumes:
- ./app:/var/www/html
- ./uploads:/var/www/uploads
1条答案
按热度按时间9cbw7uwe1#
希望有一个面部表情我可以把这里。当我尝试在不需要sudo的情况下安装docker时,我没有做的一件事是重新启动Ubuntu。我只是签了出去,然后又签了回来。我在upwork上雇了一个很棒的devops家伙,他向我指出我需要“把它关掉再打开”。哈哈
From Docker install instructions:
Post installation steps to run without sudo:
我的关键错误是我假设Ubuntu 22.04将与Manjaro Linux的行为相同。在Manjaro上,注销和重新登录将我的用户注册为docker组的一部分。另一方面,Ubuntu 22.04在我的用户注册为docker组的一部分之前需要完全重启。完全重启后,我可以在没有sudo的情况下运行docker,并且容器中的权限再次正确,我的php应用程序中不再有任何写权限错误。
因此,“关闭并再次打开”仍然适用于Linux世界的某些部分。呃。