2017-09-05 1 views
0

Ich habe einen einfachen Docker-Container, den ich mit Docker-Compose (Version 3) erstellen, um einen einfachen LAMP-Stack zu erstellen.
Das Problem, das ich habe, ist, dass Dateien, die im Docker Container erstellt werden, immer im Besitz von root sind, so dass ich sie nicht lokal bearbeiten kann.
Ich habe versucht, den Container www-Daten Benutzer auf die gleiche UID als mein lokaler Benutzer, der funktioniert, aber neue Dateien werden immer noch von Root erstellt.
Wie erstelle ich eine Datei im Container, die ich lokal bearbeiten kann?Docker - Erstellen Sie neue Dateien als www-Daten und nicht root

Meine verfasste Datei;

version: "3" 

services: 
    webserver: 
     build: 
      context: ./docker/containers/webserver 
     container_name: 'apache7.1-webserver' 
     restart: 'always' 
     ports: 
      - "80:80" 
      - "443:443" 
     links: 
      - mysql 
     volumes: 
      - ${DOCUMENT_ROOT}:/var/www/html 
      - ${PHP_INI}:/usr/local/etc/php/php.ini 
      - ${VHOSTS_DIR}:/etc/apache2/sites-enabled 
      - ${APACHE_LOG_DIR}:/var/log/apache2 
    mysql: 
     build: ./docker/containers/mysql 
     container_name: 'apache7.1-mysql' 
     restart: 'always' 
     ports: 
      - "3306:3306" 
     volumes: 
      - ${MYSQL_DATA_DIR}:/var/lib/mysql 
      - ${MYSQL_LOG_DIR}:/var/log/mysql 
     environment: 
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} 
      MYSQL_DATABASE: ${MYSQL_DATABASE} 
      MYSQL_USER: ${MYSQL_USER} 
      MYSQL_PASSWORD: ${MYSQL_PASSWORD} 
    redis: 
     container_name: 'apache7.1-redis' 
     image: redis:latest 
     ports: 
      - "6379:6379" 

Mein Webserver Dockerfile;

FROM php:7.1-apache 

# Get any build argument overrides 
ARG APP_UID 
ARG APP_GID 

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 

RUN apt-get clean -y \ 
    && apt-get update -y \ 
    && apt-get install -y \ 
     g++ \ 
     locales \ 
     libxml2-dev \ 
     php-soap \ 
     zlib1g-dev \ 
     libicu-dev \ 
     libfreetype6-dev \ 
     libjpeg62-turbo-dev \ 
     libpng12-dev \ 
     libmcrypt-dev \ 
     libpng12-dev \ 
     libcurl4-openssl-dev \ 
     libxml2-dev \ 
     nano \ 
    && apt-get clean -y 

RUN docker-php-ext-install mysqli mbstring zip intl mcrypt curl json 
RUN docker-php-ext-install iconv xml xmlrpc 

RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ 
    && docker-php-ext-install -j$(nproc) gd 

# Add any required locales here and restart php-fpm, note that some locales do not include currencies such as EURO, if 
# this is the case then they will need to be generated in addition to main locale 
RUN sed -i -e 's/# en_GB.UTF-8 UTF-8/en_GB.UTF-8 UTF-8/' /etc/locale.gen \ 
    && sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \ 
    && sed -i -e 's/# pt_BR.UTF-8 UTF-8/pt_BR.UTF-8 UTF-8/' /etc/locale.gen \ 
    && sed -i -e 's/# de_AT.UTF-8 UTF-8/de_AT.UTF-8 UTF-8/' /etc/locale.gen \ 
    && sed -i -e 's/# [email protected] ISO-8859-15/[email protected] ISO-8859-15/' /etc/locale.gen \ 
    && sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen \ 
    && sed -i -e 's/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/' /etc/locale.gen \ 
    && dpkg-reconfigure --frontend=noninteractive locales \ 
    && kill -USR2 1 

RUN pecl install redis-3.1.2 \ 
    && pecl install xdebug-2.5.0 \ 
    && docker-php-ext-enable redis xdebug 

# Enable apache modules 
RUN a2enmod rewrite headers 

# Change www-data user to match the host system UID and GID and chown www directory 
RUN usermod --non-unique --uid 1000 www-data \ 
    && groupmod --non-unique --gid 1000 www-data \ 
    && chown -R www-data:www-data /var/www 

Antwort

1

Sie können das Benutzer mit der USER Richtlinie https://docs.docker.com/engine/reference/builder/#user.

So müssten Sie zum Beispiel hinzufügen USER 1000 oder USER www-data in der Dockerfile.

+0

Ich habe USER auf 1000 (und www-Daten) eingestellt. Wenn das geschieht, kann der Container nicht gestartet werden – Rooneyl

+0

Was ist der Fehler? –

+0

(13) Berechtigung verweigert: AH00072: make_sock: konnte nicht an Adresse 0.0.0.0:80 keine hörende Sockets verfügbar, Herunterfahren – Rooneyl

Verwandte Themen