【问题标题】:Docker / PHP / Apache - File permissions lost when created inside containerDocker / PHP / Apache - 在容器内创建文件权限时丢失
【发布时间】:2020-09-16 04:58:06
【问题描述】:

我正在尝试使用 Apache 和 Php 堆栈设置一个 docker 应用程序。 但是当我在我的项目容器中创建一个新文件时,权限会丢失,因为默认情况下连接的是 root 用户。 如何连接我的主机用户?

docker-compose.yml

version: '3'
services:
  web:
    container_name: web
    build:
      context: docker/web
    volumes:
      - ./app/:/var/www/app
      - ./docker/web/apache/log:/var/log/apache2/app
    working_dir: /var/www/app
    ports:
      - 80:80

dockerfile

FROM php:7.4-apache

ENV APACHE_DOCUMENT_ROOT /var/www

RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libzip-dev \
        git \
        zip \
        unzip \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install zip pdo pdo_mysql opcache \
    && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN rm /etc/localtime
RUN ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime
RUN "date"


RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

COPY php/php.ini /usr/local/etc/php/conf.d/app.ini
COPY apache/app.conf /etc/apache2/sites-available/000-default.conf

RUN groupadd dev -g 1000
RUN useradd dev -g dev -d /home/dev -m
RUN echo '%dev ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

我试图在我的 Dockerfile 中创建一个开发用户,但没有工作。

【问题讨论】:

    标签: php apache docker symfony


    【解决方案1】:

    我通过将我的开发用户添加到 sudoers 然后在 sudo 中运行 apache2ctl 解决了这个问题。

    FROM php:7.4-apache
    
    RUN apt-get update && apt-get install -y \
            sudo \
            libfreetype6-dev \
            libjpeg62-turbo-dev \
            libpng-dev \
            libzip-dev \
            git \
            zip \
            unzip \
        && docker-php-ext-configure gd --with-freetype --with-jpeg \
        && docker-php-ext-install -j$(nproc) gd \
        && docker-php-ext-install zip pdo pdo_mysql opcache \
        && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
    
    RUN rm /etc/localtime
    RUN ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime
    RUN "date"
    
    
    RUN sed -ri -e 's!/var/www/html!/var/www!g' /etc/apache2/sites-available/*.conf
    RUN sed -ri -e 's!/var/www/!/var/www!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
    
    COPY php/php.ini /usr/local/etc/php/conf.d/app.ini
    COPY apache/app.conf /etc/apache2/sites-available/000-default.conf
    
    RUN groupadd dev -g 1000
    RUN useradd dev -g dev -d /home/dev -m
    RUN echo '%dev ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
    USER dev:dev
    
    CMD ["sudo", "/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
    

    【讨论】:

      【解决方案2】:

      这个怎么样?

      # Add www-data to the '1000-group'
      RUN usermod -u 1000 www-data
      

      【讨论】:

      • 实际上,当我使用docker exec -it -u dev:dev web bash 连接到容器时它正在工作,但我想在使用docker exec -it web bash 连接时自动连接到开发用户
      • 在我的 dockerfile 中添加 USER dev:dev 时,我有“权限被拒绝:AH00072:make_sock:无法绑定到地址 0.0.0.0:80 没有可用的侦听套接字,正在关闭”
      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2019-09-11
      • 2018-05-25
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多