php 如何解决Docker Symfony 6上的Permission denied

vptzau2j  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(116)

我刚开始学习如何使用Docker。
在这种情况下,我最近一直在尝试对接我的Symfony应用程序。
我设置了一个我认为很基本的配置。
但不幸的是,当我启动服务器,我遇到一个错误500这是相当.重要的是,
我甚至不能把它包含的一切,因为它占用了太多的空间。

为了澄清,我首先构建镜像,一旦完成,我将生成的镜像关联到docker-compose.yml文件中,然后启动容器。你可以在这个address找到我的网站仓库,如果你想看看配置。
我试图找到错误的原因,我专注于错误的第一行,因为指示的路径似乎不一致,但不可能用我使用的方法修改。
我怀疑错误来自于我的apache.conf文件的错误配置,但路径似乎是正确的,所以我不知道。
以下是我的docker配置文件:

Dockerfile

FROM php:8.2-apache

ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/

RUN chmod +x /usr/local/bin/install-php-extensions && \
    install-php-extensions gd xdebug

RUN curl -sSk https://getcomposer.org/installer | php -- --disable-tls && \
    mv composer.phar /usr/local/bin/composer

RUN apt update && apt install -yqq nodejs npm

COPY . /var/www/

COPY ./docker/apache.conf /etc/apache2/sites-available/000-default.conf

ENV COMPOSER_ALLOW_SUPERUSER=1

RUN cd /var/www/ && \
    composer install && \
    npm install --force && \
    composer require symfony/webpack-encore-bundle && \
    composer require symfony/dotenv && \
    npm run build

WORKDIR /var/www/

EXPOSE 80

docker-compose.yml

version: '3'

services:
  database:
    image: postgres:${POSTGRES_VERSION:-15}-alpine
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-app}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
      POSTGRES_USER: ${POSTGRES_USER:-symfony}
    volumes:
      - database_data:/var/lib/postgresql/data:rw

  app:
    image: sha256:6ffb6a8bd9083d4f5f8723a75c216c926669aafe29000886fd071f580eecf529
    ports:
      - "8080:80"
    environment:
      DATABASE_URL: postgresql://symfony:[email protected]:5432/app?serverVersion=15&charset=utf8
  
volumes:
  database_data:

apache.conf

<VirtualHost *:80>
    ServerName localhost

    DocumentRoot /var/www/public
    DirectoryIndex /index.php

    <Directory /var/www/public>
        AllowOverride None
        Order Allow,Deny
        Allow from All

        FallbackResource /index.php
    </Directory>

    ErrorLog /var/log/apache2/project_error.log
    CustomLog /var/log/apache2/project_access.log combined

</VirtualHost>

我会继续自己寻找,当然,我会回来解释,如果我发现错误来自哪里。
我想感谢任何试图帮助我解决我的错误的人,我祝大家晚上好。

xtupzzrd

xtupzzrd1#

在Dockerfile中,您可以将COPY . /var/www/替换为COPY --chown=www-data:www-data . /var/www/,然后在WORKDIR /var/www/之前切换到正确的用户USER www-data
默认情况下,docker以root权限运行,因此通过这样做,您可以将文件的所有权更改为webserver用户,然后在容器启动时切换到它(尽管您以root身份执行所有其他步骤)。如果您的Web服务器使用不同的用户,请将www-data更改为该特定用户。
最终的Dockerfile应该看起来像这样:

FROM php:8.2-apache

ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/

RUN chmod +x /usr/local/bin/install-php-extensions && \
    install-php-extensions gd xdebug

RUN curl -sSk https://getcomposer.org/installer | php -- --disable-tls && \
    mv composer.phar /usr/local/bin/composer

RUN apt update && apt install -yqq nodejs npm

COPY --chown=www-data:www-data . /var/www/

COPY ./docker/apache.conf /etc/apache2/sites-available/000-default.conf

ENV COMPOSER_ALLOW_SUPERUSER=1

RUN cd /var/www/ && \
    composer install && \
    npm install --force && \
    composer require symfony/webpack-encore-bundle && \
    composer require symfony/dotenv && \
    npm run build

USER www-data

WORKDIR /var/www/

EXPOSE 80

如果这不起作用,你可以在运行时用exec进入容器并运行chown -R www-data:www-data var/,但取决于你如何挂载你的文件,修复可能只是临时的,直到下一个容器重新启动。

相关问题