Falsche Berechtigungen in Volumen in Docker container

Ich laufen Docker 1.8.1 OSX 10.11 über einen lokalen docker-Maschine-VM.

Habe ich Folgendes docker-Komponieren.yml:

web:
    build: docker/web
    ports:
        - 80:80
        - 8080:8080
    volumes:
        - $PWD/cms:/srv/cms

Meine Dockerfile sieht wie folgt aus:

FROM alpine

# install nginx and php
RUN apk add --update \
    nginx \
    php \
    php-fpm \
    php-pdo \
    php-json \
    php-openssl \
    php-mysql \
    php-pdo_mysql \
    php-mcrypt \
    php-ctype \
    php-zlib \
    supervisor \
    wget \
    curl \
    && rm -rf /var/cache/apk/*

RUN mkdir -p /etc/nginx && \
    mkdir -p /etc/nginx/sites-enabled && \
    mkdir -p /var/run/php-fpm && \
    mkdir -p /var/log/supervisor && \
    mkdir -p /srv/cms

RUN rm /etc/nginx/nginx.conf
ADD nginx.conf /etc/nginx/nginx.conf
ADD thunder.conf /etc/nginx/sites-enabled/thunder.conf

ADD nginx-supervisor.ini /etc/supervisor.d/nginx-supervisor.ini

WORKDIR "/srv/cms"
VOLUME "/srv/cms"

EXPOSE 80
EXPOSE 8080
EXPOSE 22

CMD ["/usr/bin/supervisord"]

Wenn ich alles mit docker-compose up funktioniert auch alles Prima, meine Laufwerke montiert sind an der richtigen Stelle.

Aber die Berechtigungen in den gemounteten Ordner /srv/cms falsch Aussehen. Der Benutzer „1000“ und die Gruppe „50“ in den container. Der webserver konnte nicht erstellt alle Dateien in diesem Ordner, denn es läuft mit dem user „root“.

  • Wenn es läuft mit root, dann sollte es in der Lage sein, schreiben einen beliebigen Ordner. Hat Ihr Vorgesetzter config gibt einem anderen Benutzer? Ist uid 1000 und gid 50 die Benutzer auf Ihrem Mac OS X?
InformationsquelleAutor rotespferd | 2016-03-20



One Reply
  1. 6

    1) Allgemeine Idee: Docker ist es nicht asozial nennen. Es ist falsch, zwei verschiedene Dienste in einem container! Split Sie in zwei verschiedene Bilder, und verknüpfen Sie Sie zusammen. Nicht dieses beschissene Bild.

    Überprüfen und Folgen Sie https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

    • Vermeiden Sie unnötige Pakete
    • Nur ausgeführt, ein Prozess pro container
    • Minimieren der Anzahl von Schichten

    Wenn Sie es tun:

    • entfernen Sie von Ihrem Betreuer
    • Ihr abnehmen kann zahlen von Schichten

    Es sollte so etwas wie (Beispiel):

    FROM alpine
    
    RUN apk add --update \
        wget \
        curl
    RUN apk add --update \
        php \
        php-fpm \
        php-pdo \
        php-json \
        php-openssl \
        php-mysql \
        php-pdo_mysql \
        php-mcrypt \
        php-ctype \
        php-zlib
    RUN usermod -u 1000 www-data
    RUN rm -rf /var/cache/apk/*
    
    EXPOSE 9000
    

    Für nginx ist es genug, um Standard-Bild-und-mount-Konfigurationen.
    docker-compose-Datei wie:

    nginx:
      image: nginx
      container_name: site.dev
      volumes:
        - ./myconf1.conf:/etc/nginx/conf.d/myconf1.conf
        - ./myconf2.conf:/etc/nginx/conf.d/myconf2.conf
        - $PWD/cms:/srv/cms
      ports:
        - "80:80"
      links:
       - phpfpm
    phpfpm:
      build: ./phpfpm/
      container_name: phpfpm.dev
      command: php5-fpm -F --allow-to-run-as-root
      volumes:
        - $PWD/cms:/srv/cms
    

    2)
    Hinzufügen RUN usermod -u 1000 www-data in Dockerfile für php-container, wird es fix problem mit der Berechtigung.

    • Alpine nicht unterstützt usermod aus der box. Zu installieren, müssen Sie die shadow Paket von der testing Zweig.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.