【发布时间】: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