You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:10:27