这与Docker php:5.6-Apache Development Environment missing permissions on volume mount
有关我已尝试了几乎所有内容以使www-data
可以读取已装入的卷,我当前的解决方案是尝试通过脚本将应用程序所需的文件夹移动到/var
并提供适当的权限由www-data
写成,但这很难维持。
认为这是一个开发环境,我不介意成为安全漏洞,因此我希望apache
作为root
运行
错误:Apache没有设计为在运行时提供页面 根。已知的竞争条件将允许任何本地用户 读取系统上的任何文件。如果您仍然希望将页面作为 root然后将-DBIG_SECURITY_HOLE添加到您的CFLAGS行 src /配置文件并重建服务器。这是强烈的 建议你修改你的用户指令 httpd.conf文件列出非root用户。
使用docker image php:5.6-apache
?
这是我的docker-compose.yml
version: '2'
services:
api:
container_name: api
privileged: true
build:
context: .
dockerfile: apigility/Dockerfile
ports:
- "2020:80"
volumes:
- /ft/code/api:/var/www:rw
这是我的Dockerfile
:
FROM php:5.6-apache
USER root
RUN apt-get update \
&& apt-get install -y sudo openjdk-7-jdk \
&& echo "www-data ALL=NOPASSWD: ALL" >> /etc/sudoers
RUN apt-get install -y git zlib1g-dev libmcrypt-dev nano vim --no-install-recommends \
&& apt-get clean \
&& rm -r /var/lib/apt/lists/* \
&& docker-php-ext-install mcrypt zip \
&& curl -sS https://getcomposer.org/installer \
| php -- --install-dir=/usr/local/bin --filename=composer \
&& a2enmod rewrite \
&& sed -i 's!/var/www/html!/var/www/public!g' /etc/apache2/apache2.conf \
&& echo "AllowEncodedSlashes On" >> /etc/apache2/apache2.conf \
&& cp /usr/src/php/php.ini-production /usr/local/etc/php/php.ini \
&& printf '[Date]\ndate.timezone=UTC' > /usr/local/etc/php/conf.d/timezone.ini
WORKDIR /var/www
答案 0 :(得分:2)
为什么不完全按照你提到的问题所说的那样做呢?
RUN usermod -u 1000 www-data
RUN groupmod -g 1000 www-data
这不是黑客攻击。它是解决您在开发环境中遇到的问题的正确方法。
答案 1 :(得分:0)
因此,我设法通过使用相关帖子中的答案部分为www-data
提供已安装的数据,但是需要另外一步才能使用。
运行docker-machine start default
后,您需要ssh到它并运行以下内容:
sudo mkdir --parents /code
[其中/code
是virtualbox中的共享文件夹]
sudo mount -t vboxsf -o uid=999,gid=999 code /code
[这是为了确保uid
和gid
为999,以便下一部分工作]
然后在Dockerfile
添加
RUN usermod -u 999 www-data \
&& groupmod -g 999 www-data
安装好后,/code
将拥有所有者www-data
,问题就解决了!
答案 2 :(得分:0)
另一个更好的解决方案。
在dockerfile中添加
RUN cd ~ \ && apt-get -y install dpkg-dev debhelper libaprutil1-dev libapr1-dev libpcre3-dev liblua5.1-0-dev autotools-dev \ && apt-get source apache2.2-common \ && cd apache2-2.4.10 \ && export DEB_CFLAGS_SET="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -DBIG_SECURITY_HOLE" \ && dpkg-buildpackage -b \ && cd .. \ && dpkg -i apache2-bin_2.4.10-10+deb8u7_amd64.deb \ && dpkg -i apache2.2-common_2.4.10-10+deb8u7_amd64.deb
之后,您可以以root身份运行apache。
PS:apache2-2.4.10,apache2-bin_2.4.10-10 + deb8u7_amd64.deb和apache2.2-common_2.4.10-10 + deb8u7_amd64.deb可能会根据您的来源发生变化