2016-05-08 80 views
2

這將涉及到Docker php:5.6-Apache Development Environment missing permissions on volume mount泊塢窗集裝箱從PHP:5.6,Apache作爲根

我已經試過幾乎所有使安裝的卷是可讀的www-data,我目前的解決方案是試圖通過腳本的文件夾移動應用程序需要/var,並給予適當的權限以便由www-data寫入,但這變得難以維護。

給予的事實,這是一個開發環境,我不介意是一個安全漏洞,所以我想運行apacheroot,我得到

Error: Apache has not been designed to serve pages while running as root. There are known race conditions that will allow any local user to read any file on the system. If you still desire to serve pages as root then add -DBIG_SECURITY_HOLE to the CFLAGS line in your src/Configuration file and rebuild the server. It is strongly suggested that you instead modify the User directive in your httpd.conf file to list a non-root user.

有沒有簡單的方法,我可以使用做到這一點碼頭圖片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

你能提供您Dockerfile和你嘗試啓動你的容器的方式? – vmonteco

回答

2

爲什麼不這樣做到底是什麼在你提到的問題說?

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

這不是黑客。這是您在開發環境中遇到的問題的適當解決方案。

+0

是的,但爲了工作,你需要ssh進入docker-machine並運行'sudo mount -t vboxsf -o uid = 1000,gid = 1000 code/code' – Daniel

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 [這是爲了確保uidgid是999下一部分工作]

然後在你的Dockerfile添加

RUN usermod -u 999 www-data \ 
    && groupmod -g 999 www-data 

它的安裝後,/code將有業主www-data和問題解決了!

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 

添加此之後,你可能能夠運行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可根據您的源改變