我正在尝试将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
我希望能够指定安装它的用户。有办法吗?
答案 0 :(得分:14)
首先确定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
到标准输出。
答案 1 :(得分:5)
在卷安装的末尾添加rw对我来说很有效:
Oauth
答案 2 :(得分:0)
要在不更改主机系统所有者或权限的情况下实现所需的行为,请执行以下步骤。
将定义添加到您的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,组的ID为1001,您可以为每个环境进行不同的设置。
如果您不使用docker-compose或想了解更多不同的方法来实现此目的,请通读我的信息来源:https://dev.to/acro5piano/specifying-user-and-group-in-docker-i2e
答案 3 :(得分:0)
截至2019年中期,volume
显然没有所有者/组/权限设置,但是有一个不错的解决方法,即在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
答案 4 :(得分:0)
为此撰写服务设置用户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