2016-05-08 6 views
2

としてこれは私が私の現在のソリューションは、スクリプトでフォルダを移動しようとしている、www-dataによってマウントされたボリュームが読めるようにするほとんどすべてを試してみましたDocker php:5.6-Apache Development Environment missing permissions on volume mountドッカーコンテナ:5.6 - Apacheのルート

に関連することになりますアプリケーションによって/varに必要とされ、www-dataによって書き込み可能な適切な権限を与えているが、それは維持することが困難になってきている。それは私がrootとしてapacheを実行したいと思いますので、私はセキュリティホールであることを気にしない開発環境だと私は

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して '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

もう1つ、より良い解決策です。

は、その後、あなたの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は、ソース

関連する問題