2017-09-05 940 views
0

我有一个基本的docker容器,使用docker-compose(版本3)构建基本LAMP堆栈。
我遇到的问题是在docker容器内创建的文件始终由root拥有,所以我无法在本地编辑它们。
我曾尝试设置容器万维网数据用户具有与我的本地用户相同的uid,它工作,但新文件仍由root创建。
如何在我可以在本地编辑的容器中创建文件?Docker - 创建新文件为www-data而不是root

我撰写的文件;

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" 

我的网络服务器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 

回答

1

您可以设置与USER指令https://docs.docker.com/engine/reference/builder/#user用户。

因此,您需要在Dockerfile中添加USER 1000USER www-data

+0

我已经设置USER为1000(和www-data)。当我这样做时,容器无法启动 – Rooneyl

+0

什么是错误? –

+0

(13)权限被拒绝:AH00072:make_sock:无法绑定到地址0.0.0.0:80 没有侦听套接字可用,关闭 – Rooneyl

相关问题