Docker php:5.6-Apache开发环境缺少卷装入权限

问题描述 投票:1回答:2

我正在尝试创建一个由php:5.6-apache映像,一个mysql映像和一个包含将位于/ var / www / html /中的网站的卷装入组成的开发环境。卷装有10月CMS。

我需要docker用户拥有卷装入的权限,但我不希望它成为该卷的所有者,因此我可以轻松地在容器外修改它,并立即查看我的修改。

我的docker文件如下:

FROM php:5.6-apache
MAINTAINER me <me@internet>

# 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

我的Docker-compose包含MySql数据库的环境变量。

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

我尝试使用环境变量将Apache用户和组更改为root,但它不起作用。

任何建议都非常感谢。

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

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

这些行更改了docker中的用户和组以匹配所有者,从而为其提供完全访问权限。

请注意,在某些情况下,您的系统不会将您识别为用户1000和组1000.如果这不起作用,请将bash插入docker apache容器,并检查该卷的用户ID和组ID,然后相应地更改上面的行。

php mysql linux apache docker
2个回答
1
投票

运行docker-machine start default后,你需要ssh到它并运行以下内容以完成上述工作:

sudo mkdir --parents /var/www/html [假设/ var / www / html是虚拟机中的共享文件夹]

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


1
投票

您在已装入卷中共享的所有文件都需要具有相同的uid:在容器中运行CMD的用户的guid所有权。我设法在日常工作中使用了一些解决方法,希望其中一个可以为你工作:

  • 将资源文件复制到另一个位置和入口点cp将它们转到正确的路径,因为执行入口点脚本的用户与运行CMD的用户相同,您的文件将具有相同的uid:guid。你可以在public jenkins docker image中看到这种模式
  • 模拟docker主机中所需文件的用户和组所有权架构,这样容器和主机对于您要使用的文件具有相同的UID / GUID,因此Web服务器在尝试时不会自行终止读这些文件。
  • 使用像postgresql public docker image这样的入口点脚本动态更改所有权。

希望能帮助到你!

© www.soinside.com 2019 - 2024. All rights reserved.