2017-09-05 11 views
0

J'ai un conteneur docker de base que je compile en utilisant docker-composer (version 3) pour faire apparaître une pile LAMP de base.
Le problème que je rencontre est que les fichiers créés à l'intérieur du conteneur docker sont toujours détenus par root, je ne peux donc pas les éditer localement.
J'ai essayé de configurer l'utilisateur du conteneur www-data pour qu'il ait le même ID que mon utilisateur local, mais cela fonctionne, mais les nouveaux fichiers sont toujours créés par root.
Comment créer un fichier dans le conteneur que je peux modifier localement?Docker - Créer de nouveaux fichiers comme www-data et non root

Mon dossier de composition;

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" 

Mon serveur Web 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 

Répondre

1

Vous pouvez définir l'utilisateur avec la directive USERhttps://docs.docker.com/engine/reference/builder/#user.

Ainsi, vous devrez par exemple ajouter USER 1000 ou USER www-data dans le Dockerfile.

+0

J'ai réglé le paramètre USER à 1000 (et www-data). Lorsque je fais cela le conteneur ne parvient pas à démarrer – Rooneyl

+0

Quelle est l'erreur? –

+0

(13) Autorisation refusée: AH00072: make_sock: impossible de lier l'adresse 0.0.0.0:80 aucune socket d'écoute disponible, arrêt – Rooneyl