2016-04-20 42 views
1

我试图创建一个由php:5.6-apache映像,一个mysql映像和一个包含将位于在/ var/www/html等/。卷装有十月CMS。Docker php:5.6-Apache开发环境缺少卷挂载权限

我需要码头用户对卷装载权限,但我不希望它是该卷的所有者,所以我可以在容器外轻松修改它,并立即查看我的修改。

我的搬运工文件如下:

FROM php:5.6-apache 
MAINTAINER me <[email protected]> 

# Install modules 
RUN apt-get update 
RUN apt-get -f install -y 
RUN apt-get install -y wget 
RUN apt-get update && apt-get install -y \ 
    libmcrypt-dev \ 
    libfreetype6-dev \ 
    libjpeg62-turbo-dev \ 
    libmcrypt-dev \ 
    libpng12-dev \ 
    php-apc 
RUN docker-php-ext-install mbstring mysql mcrypt pdo pdo_mysql zip 
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 

RUN docker-php-ext-install gd 

WORKDIR /var/www/html/ 

VOLUME /var/www/html/ 

RUN a2enmod rewrite 

RUN usermod -a -G www-data root 

RUN php5enmod mcrypt && service apache2 restart 

我的码头工人,撰写包含环境变量为MySQL数据库。

当我按原样运行它时,我只得到500错误,但是如果我将卷的所有权更改为www-data,那么站点出现就好了。

我曾尝试使用环境变量将Apache用户和组更改为根,但它没有工作。

任何建议都不胜感激。

更新:我无法找到一个解决方案,以我正在寻找的确切方式解决问题,并最终实现了我认为更像是黑客攻击的事情。我添加下列行到dockerfile:

RUN usermod -u 1000 www-data 
RUN groupmod -g 1000 www-data 

这些行改变用户和组的搬运工内以匹配所有者,这样,它的完全访问。

请注意,虽然有些情况下您的系统无法识别您的用户1000和组1000.如果这不起作用,请打开docker apache容器,并检查卷的用户ID和组的大小ID,然后相应地更改上面的行。

回答

1

您在安装卷中共享的所有文件都需要具有相同的uid:在容器中运行CMD的用户的guid所有权。我设法使用一些变通方法在我的日常工作,希望那些之一,你可以工作:在另一个位置,并在入口点CP他们在正确的道路

  • COPY资源文件,因为用户是执行入口点脚本是运行CMD的同一个脚本,你的文件将具有相同的uid:guid。您可以在public jenkins docker image
  • 模仿看到这种模式的用户和组所有权架构在泊坞窗主机所需的文件,以这种方式既容器和主机具有相同的UID/GUID为您要使用的文件因此,Web服务器在尝试读取这些文件时不会自行终止。
  • 使用像postgresql public docker image这样的入口点脚本随时更改所有权

希望它有帮助!

1

运行docker-machine start default后,您需要ssh到它,并运行以下为上述工作充分:

sudo mkdir --parents /var/www/html [假设在/ var/www/html等是在你的VirtualBox的共享文件夹]

sudo mount -t vboxsf -o uid=1000,gid=1000 var/www/html /var/www/html [这是为了确保下一部分工作的uid和gid是1000]