Docker-compose在已安装的卷上设置用户和组

时间:2016-11-07 09:52:05

标签: docker docker-compose

我正在尝试将docker-compose中的卷挂载到apache映像。问题是,我的docker中的apache是​​在www-data:www-data下运行的,但挂载的目录是在root:root下创建的。如何指定已安装目录的用户?

我尝试运行命令setupApacheRights.shchown -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

我希望能够指定安装它的用户。有办法吗?

5 个答案:

答案 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)

要在不更改主机系统所有者或权限的情况下实现所需的行为,请执行以下步骤。

  1. 将定义添加到您的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
    
  2. 设置.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

source

答案 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