Docker卷和Apache权限

时间:2018-12-06 11:03:07

标签: php apache docker permissions

我正在使用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

有什么想法如何处理主机卷权限?

3 个答案:

答案 0 :(得分:0)

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

希望对您有帮助

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我尝试过的选项:

  1. 在Docker composer文件中定义其他用户ID :可能多次运行,但是在Apache尝试使用内部文件(例如ssh密钥)时可能会导致错误

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

我发现的比较简单的方法是向用户33授予对本地文件的权限。请注意,您不必创建用户。

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