Py学习  »  docker

如何管理装载到Docker容器中的卷的权限?

idix • 5 年前 • 565 次点击  

我正在开发一个wordpress主题,并希望在我的dev设置中使用docker。我所做的非常简单:

  • 创建一个 database 运行MySQL5.7的服务
  • 创建一个 wordpress 服务,我将主题文件夹作为卷装入其中 /var/www/html/wp-content/themes

不过,我正在努力获得卷权限。

我正在使用以下项目文件夹结构:

.
├── docker-compose.yml
└── my-theme

我的 docker-compose.yml 文件如下:

version: '3.2'

services:
  database:
    image: mysql:5.7
    volumes:
      - my_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: root

  wordpress:
    depends_on:
      - database
    image: wordpress:php7.3-apache
    ports:
      - '8000:80'
    restart: always
    environment:
      WORDPRESS_DB_HOST: database:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: root
    working_dir: /var/www/html
    volumes:
      - type: volume
        source: ./my-theme
        target: /var/www/html/wp-content/themes/my-theme
volumes:
  my_data: {}

当我奔跑 docker-compose up ,一切都按预期工作:容器被创建,我可以在浏览器中访问WordPress。但是,当我激活它时,作为卷装载的主题不会呈现任何内容。

当我 sh 进入 文字出版社 集装箱(集装箱) docker-compose exec wordpress sh )我可以看到 wp-content/themes 文件夹归 root . 所以我想这就是问题所在。

我手动和递归地验证了这是一个权限问题 chown ing wp-content 容器中的文件夹:

chown -R www-data:www-data /var/www/html/wp-content

完成后,我的主题按预期呈现。所以现在我正在寻找一种避免这种情况的方法 乔恩 过程(其思想是任何其他开发人员都可以克隆这个项目,只需运行 Docker合成 开始工作)。

我试着做的第一件事就是 文档文件 在这里我将构建一个稍微定制的WordPress图像:

FROM wordpress:php7.3-apache
RUN mkdir -p /var/www/html/wp-content/themes/test-theme \
  && chown -R /var/www/html/wp-content

我的理由是通过创建目录和 乔恩 预先设置,卷将继承user:group映射。唉,没有这样的事情;装载卷会覆盖此映射并将其设置回 root:root .

在那之后,我试着设置 APACHE_RUN_USER APACHE_RUN_GROUP 我的环境变量 docker-compose.yml公司 文件:

version: '3.2'

services:
  database:
    ...

  wordpress:
    ...
    environment:
      WORDPRESS_DB_HOST: database:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: root
      APACHE_RUN_USER: '$(id -u)'
      APACHE_RUN_GROUP: '$(id -g)'
    working_dir: /var/www/html
    volumes:
      - type: volume
        source: ./my-theme
        target: /var/www/html/wp-content/themes/my-theme
volumes:
  my_data: {}

但是,这在构建时抛出了大量Apache错误。

我现在在这里有点不知所措。在Docker中管理已装入卷的权限是否有任何最佳实践?我已经在谷歌上搜索了很多,但我发现的解决方案有点让我头晕目眩。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/32082
 
565 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Mihai
Reply   •   1 楼
Mihai    5 年前

#!/bin/bash

chown -R www-data:www-data /var/www/html/wp-content
docker-entrypoint.sh apache2-foreground

...
  wordpress:
...
    working_dir: /var/www/html
    volumes:
        - './my-theme:/var/www/html/wp-content/themes/my-theme'
        - './startup.sh:/startup.sh'
    entrypoint: /startup.sh