Docker撰写卷linux权限

时间:2018-10-21 16:52:15

标签: linux wordpress docker permissions docker-compose

我尝试在docker容器中运行wordpress,我的docker-compose.yaml文件是:

version: "2"
services:
  my-wpdb:
    image: mariadb
    ports:
      - "8081:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ChangeMeIfYouWant
  my-wp:
    image: wordpress
    volumes:
      - ./:/var/www/html
    ports:
      - "8080:80"
    links:
      - my-wpdb:mysql
    environment:
      WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

当我构建docker结构时,该卷已安装但属于根目录。

我尝试通过以下方式对此进行更改:

my-wp:
  image: wordpress
  user: 1000:1000    # added
  volumes:
    - ./:/var/www/html
  ports:
    - "8080:80"
  links:
    - my-wpdb:mysql
  environment:
    WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

现在我可以编辑文件了。但是随后该容器不再为网站提供服务。

解决此权限问题的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

根据docker-composedocker run的引用,user选项设置在容器中运行的进程的用户ID(和组ID)。如果将其设置为1000:1000,则您的Web服务器将无法再绑定到端口80。绑定到1024以下的端口需要root权限。这意味着您应该再次删除添加的user: 1000:1000语句。

要解决共享卷的权限问题,您需要更改目录的所有权。运行chown 1000:1000 /path/to/volume。这可以在容器内部执行,也可以直接在主机系统上执行。更改是持久且立即生效的(无需重新启动容器)。

通常,我认为该卷应位于子目录中,例如

  volumes:
    - ./public:/var/www/html

确保正确的用户拥有./public。如果您启动容器,但目录不存在,则docker会为您创建它。在这种情况下,该目录归root所有,您需要如上所述手动更改所有权。


或者,您可以以非特权用户(user: 1000:1000)的身份运行Web服务器,让服务器侦听端口8080并将路由更改为

 ports:
    - "8080:8080"

答案 1 :(得分:-4)

我正在使用Google Cloud shell,发现以下命令为我启用了正确的权限,以便我可以通过WordPress docker容器使用FTP文件访问:

sudo chmod 644 -R wordpress-docker-compose