gpt4 book ai didi

php - Docker php :5. 6-Apache 开发环境缺少卷装载权限

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:20 24 4
gpt4 key购买 nike

我正在尝试创建一个由 php:5.6-apache 镜像、mysql 镜像和包含将位于/var/www/html/中的网站的卷装载组成的开发环境。卷挂载有 October 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,但没有成功。

非常感谢任何建议。

更新:我无法找到一个解决方案来完全按照我正在寻找的方式解决问题,并最终实现了一些我认为更像是 hack 的东西。我在 dockerfile 中添加了以下几行:

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

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

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

最佳答案

您在挂载卷中共享的所有文件都需要与在您的容器中运行 CMD 的用户具有相同的 uid:guid 所有权。我设法在日常工作中使用了一些变通方法,希望其中之一对您有用:

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

希望对您有所帮助!

关于php - Docker php :5. 6-Apache 开发环境缺少卷装载权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36732334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com