社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

idix • 7 年前 • 1660 次点击  

我正在开发一个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
文章 [ 1 ]  |  最新文章 7 年前
Mihai
Reply   •   1 楼
Mihai    7 年前

#!/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