【问题标题】:php app files permission after docker builddocker build后的php app文件权限
【发布时间】:2015-10-19 01:32:37
【问题描述】:

我正在尝试使用此 Dockerfile 使用 SuiteCRM 构建 docker 映像:

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 在 boot2docker 下运行: Boot2Docker-cli 版本:v1.7.1 Docker 版本 1.7.1

【问题讨论】:

  • 可能在路径中找不到命令之一?尝试指定它们的完整路径,特别是 curl 或 unzip
  • 所有这些命令在构建过程中都已正确完成。所有文件在其位置的权限都符合执行的命令(chown,chmod)。但是,我不知道为什么,这个权限对于 apache 来说是不可接受的。
  • 容器是退出还是继续运行?
  • 构建并运行后,我通过 docker exec -t [container_name] [command] 连接到容器。所有检查都是在运行容器时进行的。

标签: apache docker file-permissions dockerfile


【解决方案1】:

权限似乎不在文件上,而是在“打开流”操作上。 这可能是原因之一:

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

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

【讨论】:

  • 感谢您的帮助。通过将所有文件操作合并到一个命令中来解决问题。 RUN unzip -q suitecrm.zip -d /var/www/ \ && rm suitecrm.zip \ && rm -rf /var/www/html \ && mv /var/www/suitecrm-7.2.2-max /var/www/html \ && rm -rf /var/www/suitecrm-7.2.2-max \ && chown -R www-data:www-data /var/www/html \ && chmod -R 755 /var/www/html \ && cd /var/www/html \ && chmod -R 775 cache custom modules themes data upload config_override.php
  • 如我所见,这些命令在同一个临时容器中执行,因此可以解决问题。
猜你喜欢
  • 2013-05-15
  • 1970-01-01
  • 2016-05-04
  • 2021-07-22
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
相关资源
最近更新 更多