Docker/PHP/Apache-在容器内创建时丢失文件权限

Docker/PHP/Apache-在容器内创建时丢失文件权限,php,apache,docker,symfony,Php,Apache,Docker,Symfony,我正在尝试使用Apache和Php堆栈设置docker应用程序。 但当我在项目容器中创建新文件时,权限会丢失,因为默认情况下根用户已连接。 如何连接主机用户 docker compose.yml version: '3' services: web: container_name: web build: context: docker/web volumes: - ./app/:/var/www/app - ./docker/web

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

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中创建一个开发人员用户,但没有工作。

这个怎么样

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

我通过将我的开发用户添加到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"]

事实上,当我用
docker exec-it-u dev:dev-web bash
连接到容器时,它是工作的,但是当我用
docker exec-it-web bash
连接到
dockerfile中添加
用户dev:dev
时,我想自动连接到dev用户权限被拒绝:AH00072:make_sock:无法绑定到地址0.0.0.0:80没有可用的侦听套接字,正在关闭