php docker 构建后的应用程序文件权限

php app files permission after docker build

我正在尝试使用此 Docker 文件构建 docker 图像与 SuiteCRM:

FROM php:5.4-apache

RUN a2enmod rewrite

RUN apt-get update \
    && apt-get install -y apt-utils \
    && apt-get install -y libpng12-dev libjpeg-dev mercurial zip nano \
    && docker-php-ext-configure gd --with-jpeg-dir=/usr/lib \
    && docker-php-ext-install gd \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install pdo_mysql \
    && apt-get -y install re2c libmcrypt-dev \
    && docker-php-ext-install mcrypt \
    && apt-get -y install zlib1g-dev \
    && docker-php-ext-install zip \
    && apt-get purge --auto-remove -y zlib1g-dev \
    && apt-get -y install libssl-dev libc-client2007e-dev libkrb5-dev \
    && docker-php-ext-configure imap --with-imap-ssl --with-kerberos \
    && docker-php-ext-install imap mbstring json \
    && rm -rf /var/lib/apt/lists/*

RUN curl -k -L -o suitecrm.zip "https://suitecrm.com/component/dropfiles/?task=frontfile.download&id=35"
RUN unzip -q suitecrm.zip -d /var/www/
RUN rm suitecrm.zip
RUN rm -rf /var/www/html && mv /var/www/suitecrm-7.2.2-max /var/www/html
RUN rm -rf /var/www/suitecrm-7.2.2-max
RUN chown -R www-data:www-data /var/www/html
RUN chmod -R 755 /var/www/html
RUN chmod -R 775 cache custom modules themes data upload config_override.php

EXPOSE 80
CMD ["apache2-foreground"]

然后构建图像 运行 我遇到错误:

Warning: include(include/MVC/preDispatch.php): failed to open stream: Permission denied in /var/www/html/index.php on line 42
...

文件所有者是 www-data:www-data

$ docker exec -t suite_web_dev ls -la index.php
-rwxr-xr-x 1 www-data www-data 2525 Mar  2 18:04 index.php
$ docker exec -t suite_web_dev ls -la include/MVC/preDispatch.php
-rwxr-xr-x 1 www-data www-data 2766 Mar  2 18:04 include/MVC/preDispatch.php

如果我在下载应用程序和更改文件权限的地方排除表格 Dockerfile 行,并在图像启动后调用这些命令,一切正常。

RUN curl -k -L -o ...
...
RUN chmod -R 775 cache custom modules themes data upload config_override.php

在构建时和 运行 之后更改权限有何不同?使用 App 代码构建图像需要做什么?

更新: docker 运行s 在 boot2docker 下: Boot2Docker-cli版本:v1.7.1 Docker 版本 1.7.1

好像不是文件权限,而是'open stream'操作权限。 这可能是原因之一:

当您在 docker 文件中安装应用程序时,最终容器的主机名将不再与构建映像时使用的临时容器的主机名相同。应用程序安装程序可能会获取主机名并将其存储在某个配置文件中。

如果是这样,那么,当您 运行 容器时,您应该执行一个脚本来替换配置中的主机名。