![](/img/trans.png)
[英]Docker - nginx with mounted host volume hangs using docker-compose
[英]Docker-compose set user and group on mounted volume
我正在尝试将 docker-compose 中的卷安装到 apache 映像。 问题是,我的 docker 中的 apache 在www-data:www-data
下运行,但挂载的目录是在root:root
下创建的。 如何指定挂载目录的用户?
我试图运行命令setupApacheRights.sh
。 chown -R www-data:www-data /var/www
但它说chown: changing ownership of '/var/www/somefile': Permission denied
services:
httpd:
image: apache-image
ports:
- "80:80"
volumes:
- "./:/var/www/app"
links:
- redis
command: /setupApacheRights.sh
我希望能够指定将在其下安装的用户。 有办法吗?
坏消息是volume
😢 没有所有者/组/权限设置。 好消息是以下技巧将让您将其烘焙到您的配置中,因此它是完全自动化的 🎉。
在您的 Dockerfile 中,在正确的位置创建一个具有所需设置的空目录。
这样,当 docker-compose 挂载到该位置时,该目录将已经存在。 当服务器在启动过程中挂载时(基于 docker-compose),挂载操作很高兴地将这些权限置之不理。
Dockerfile:
# setup folder before switching to user
RUN mkdir /volume_data
RUN chown postgres:postgres /volume_data
USER postgres
docker-compose.yml
volumes:
- /home/me/postgres_data:/volume_data
要在不更改主机系统上的所有者/权限的情况下实现所需的行为,请执行以下步骤。
获取您希望权限与在主机系统上执行id
命令匹配的所需用户和/或组的id
- 这将显示您当前用户的 uid 和 gid 以及该用户所在的所有组的所有 ID .
$ id
将定义添加到您的 docker-compose.yml
user: "${UID}:${GID}"
所以你的文件可能看起来像这样
php: # this is my service name user: "${UID}:${GID}" # we added this line to get a specific user / group id image: php:7.3-fpm-alpine # this is my image # and so on
在.env
文件中设置值
UID=1000 GID=1001
现在,您在容器中的用户的 ID 为 1000,组为 1001,您可以针对每个环境进行不同的设置。
注意:请将我使用的 ID 替换为您在主机系统上找到的用户/组 ID。 由于我不知道您的系统正在使用哪些 ID,我给出了一些示例组和用户 ID。
如果您不使用 docker-compose 或想了解更多不同的方法来实现这一点,请阅读我的信息来源: https : //dev.to/acro5piano/specifying-user-and-group-in-docker- i2e
首先确定www-data
用户的uid:
$ docker exec DOCKER_CONTAINER_ID id
uid=100(www-data) gid=101(www-data) groups=101(www-data)
然后,在您的 docker 主机上,使用 uid(在本例中为 100)更改挂载目录的所有者:
chown -R 100 ./
如果您正在使用docker-compose
您也可以这样做:
$ docker-compose exec SERVICE_NAME id
uid=100(www-data) gid=101(www-data) groups=101(www-data)
$ chown -R 100 ./
你可以把它放在一个单行中:
$ chown -r $(docker-compose exec SERVICE_NAME id -u) ./
-u
标志只会将uid
打印到 stdout。
将 rw 添加到卷挂载的末尾对我有用:
services:
httpd:
image: apache-image
ports:
- "80:80"
volumes:
- "./:/var/www/app:rw"
links:
- redis
command: /setupApacheRights.sh
为此撰写服务设置用户 www-data
user: "www-data:www-data"
示例:
wordpress:
depends_on:
- db
image: wordpress:5.5.3-fpm-alpine
user: "www-data:www-data"
container_name: wordpress
restart: unless-stopped
env_file:
- .env
volumes:
- ./wordpress/wp-content:/var/www/html/wp-content
- ./wordpress/wp-config-local.php:/var/www/html/wp-config.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.