如何配置Docker环境,正确服务指定路径的Symfony项目?
解决Symfony项目Docker容器服务配置问题
你的核心问题是挂载路径与服务配置不匹配,导致PHP-FPM和Nginx无法正确定位Symfony的index.php。以下是针对性的修改方案:
1. 调整代码挂载路径
当前你将Symfony项目根目录./rapid-backend挂载到了容器的/var/www/public,但Symfony的项目结构是项目根/public/index.php,所以应该把项目根挂载到容器的/var/www,让/var/www/public自动对应Symfony的Web根目录。
修改docker-compose.yml中php和nginx服务的volumes:
services: # ... 其他服务保持不变 php: container_name: php build: context: . # 移除不必要的9000端口暴露(容器间通信无需对外暴露) volumes: - ./rapid-backend:/var/www # 修改这里 depends_on: - database nginx: container_name: nginx image: nginx:stable-alpine ports: - '8080:80' volumes: - ./rapid-backend:/var/www # 修改这里 - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php - database
2. 修正PHP-FPM容器的工作目录
你的Dockerfile中WORKDIR设置为/var/www/html,但现在项目根在/var/www,需要同步修改:
FROM php:8.0-fpm RUN apt update \ && apt install -y zlib1g-dev g++ git libicu-dev zip libzip-dev zip \ && docker-php-ext-install intl opcache pdo pdo_mysql \ && pecl install apcu \ && docker-php-ext-enable apcu \ && docker-php-ext-configure zip \ && docker-php-ext-install zip WORKDIR /var/www # 修改这里 RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN curl -sS https://get.symfony.com/cli/installer | bash RUN mv /root/.symfony5/bin/symfony /usr/local/bin/symfony RUN git config --global user.email "email@email.com" \ && git config --global user.name "Damian Kowalski"
3. 配置Nginx的default.conf
确保Nginx正确将请求转发到PHP-FPM,并指向Symfony的public目录。创建或修改./docker/nginx/default.conf:
server { listen 80; server_name localhost; root /var/www/public; # 指向Symfony的Web根目录 index index.php index.html; # 处理Symfony的路由重写 location / { try_files $uri $uri/ /index.php$is_args$args; } # 处理PHP请求,转发到PHP-FPM服务 location ~ ^/index\.php(/|$) { fastcgi_pass php:9000; # 用docker-compose的服务名通信 fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; internal; } # 拦截其他PHP请求,避免直接访问 location ~ \.php$ { return 404; } }
4. 重新构建并启动容器
执行以下命令应用修改:
docker-compose down docker-compose build --no-cache docker-compose up -d
可选:权限优化(开发环境)
如果遇到文件权限问题,可在Dockerfile中添加以下命令,让PHP-FPM使用与宿主机相同UID的用户(避免权限冲突):
# 在WORKDIR之后添加 RUN usermod -u 1000 www-data
内容的提问来源于stack exchange,提问作者Damian Kowalski
相关产品推荐
相关产品推荐

