【问题标题】:docker volumes and apache permissionsdocker 卷和 apache 权限
【发布时间】:2019-05-08 01:34:40
【问题描述】:

我正在使用 docker 为大型网站提供 php 服务。问题是当我将我的主机卷链接到容器时,我得到了权限错误。我知道我可以运行chmod -R 777 /var/www,但这不是有点危险吗?

我的 Dockerfile

FROM php:7.0.3-apache 
RUN docker-php-ext-install mysqli
RUN a2enmod rewrite
RUN a2enmod headers
RUN docker-php-ext-install pdo_mysql
RUN apt-get update -y && apt-get install -y sendmail libpng-dev

RUN apt-get update && \
    apt-get install -y \
        zlib1g-dev 

RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

RUN docker-php-ext-install mbstring

RUN docker-php-ext-install zip

RUN docker-php-ext-install gd

我的 Docker-Compose.yml

version: "2"
services:
    www:
        build: .
        ports: 
            - "80:80"
        volumes:
            - ./test.com:/var/www/
        links:
            - db
        networks:
            - default
    db:
        image: mysql:5.7
        ports: 
            - "3306:3306"
        environment:
            MYSQL_DATABASE: test
            MYSQL_USER: test
            MYSQL_PASSWORD: test
            MYSQL_ROOT_PASSWORD: test
        volumes:
            - ./mysql:/var/lib/mysql
        networks:
            - default

任何想法如何处理主机卷权限?

【问题讨论】:

    标签: php apache docker permissions


    【解决方案1】:

    正如您已经怀疑的那样,chmod777 绝对不是一个好主意。您需要将文件夹和文件添加到 apache 组:chown -R <current_user>:www-data /test.com,并将权限更改为 755

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      您可以为 docker 容器的用户设置 uid 与主机用户的 uid 相同。它应该会有所帮助。

      【讨论】:

      • 你能举个例子吗?我的主机用户名是 docker。我是否需要将用户 docker 添加到容器并授予文件夹的权限。
      • 您可以通过命令id -uid -g获取PUID和GUID。您可以通过 Dockerfile 在容器内创建用户,例如:ARG PUID=1000 ARG PGID=1001 RUN groupadd -g $PGID customgrpoup && useradd -u $PUID -g customgrpoup -m customuser 现在您应该通过新的自定义用户在容器内启动服务。您还可以通过 docker-compose 文件将 PUID 和 GUID 作为环境参数传递。如果你这样做,主机用户和 docker 用户对于文件系统将是相同的。
      【解决方案3】:

      我花了一些时间为这种情况寻找最佳解决方案。 我发现最干净的方法是在主机上设置用户 33 的权限。

      我尝试过的选项:

      1. 在 Docker 作曲家文件中定义不同的用户 ID:可能多次工作,但在 Apache 尝试使用内部文件(例如 ssh 密钥)时可能会导致错误

        李>
      2. 将本地 UID 作为 env 变量传递并将 www-data 添加到同一组/id:您必须在构建过程中作为 Docker 文件说明的一部分执行此操作,因此当您创建具有主机权限的图像时,它还会创建另一个粗略的场景。

      我发现的不太麻烦的方法是将本地文件的权限授予用户 33。请注意,您不必创建用户。

      setfacl -R -m u:33:rwx /path/to/your/files

      【讨论】:

        猜你喜欢
        • 2021-01-07
        • 1970-01-01
        • 2019-11-30
        • 2021-01-04
        • 2020-08-07
        • 1970-01-01
        • 2019-03-25
        • 2019-05-30
        • 1970-01-01
        相关资源
        最近更新 更多