2016-05-08 10 views
2

Dies zu Docker php:5.6-Apache Development Environment missing permissions on volume mountDocker Container von php: 5,6-Apache als root

bezogen werden hätte ich so ziemlich alles versucht, das montiert Volumen von www-data, meine aktuelle Lösung lesbar zu machen versucht, mithilfe von Skripts zu bewegen, die Ordner benötigt von der Anwendung zu /var und geben die richtigen Berechtigungen, um durch www-data beschreibbar sein, aber das wird schwer zu pflegen.

Giving die Tatsache, dass es eine Entwicklungsumgebung macht mir nichts ein Sicherheitsloch ist, so würde ich apache als root laufen mögen und ich

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.

Gibt es eine einfache Weise, die ich dies erreichen kann mit der Docker Bild php:5.6-apache?

Das ist mein 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 

Und das ist mein 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

Könnten Sie Ihre Dockerfile und wie Sie versuchen, Ihren Container zu starten? – vmonteco

Antwort

2

Warum genau nicht tun, was heißt es in der Frage an Sie verwiesen?

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

Dies ist kein Hack. Es ist eine angemessene Lösung für das Problem, das Sie in der Entwicklungsumgebung haben.

+0

ja, aber dafür müssen Sie ssh in Ihre Docker-Maschine und führen Sie 'sudo mount-t vboxsf -o uid = 1000, gid = 1000 Code/Code' – Daniel

0

Also, ich habe es geschafft, die gemounteten Daten für www-data zur Verfügung zu stellen, indem Sie den Teil der Antwort im zugehörigen Beitrag verwenden, aber ein anderer Schritt ist erforderlich, damit es funktioniert.

Nachdem Sie laufen docker-machine start default man in sie ssh müssen, und führen Sie die folgenden Schritte aus:

sudo mkdir --parents /code [wo /code ist der freigegebene Ordner in VirtualBox]

sudo mount -t vboxsf -o uid=999,gid=999 code /code [dies ist sicherzustellen, dass die uid und gid ist 999 für den nächsten Teil]

Dann arbeiten in Ihrem Dockerfile hinzufügen

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

Nachdem es montiert ist, hat /code den Besitzer www-data, und Problem gelöst!

0

Eine andere und bessere Lösung.

diese

 
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 

Danach in Ihrem dockerfile hinzufügen, könnten Sie in der Lage sein, Apache als root ausführen.

PS: apache2-2.4.10, apache2-bin_2.4.10-10 + deb8u7_amd64.deb und apache2.2-common_2.4.10-10 + deb8u7_amd64.deb könnte entsprechend Ihrer Quelle ändern