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

Docker部署Angular17+Symfony6:容器运行但4200端口无法访问

Angular 17 + Symfony 6 Docker部署问题:localhost:4200连接重置

问题现象

Angular容器显示运行正常,但浏览器访问localhost:4200时出现err_connection_reset错误,无法打开应用。

项目架构

frontAndBackProjectsFolder
├── project_client
│   └── Dockerfile
├── project_server
│   └── Dockerfile
└── compose.yaml

配置文件

compose.yaml

services:

  apache:
    container_name: project_server
    build: ./project_server/
    environment:
      APP_ENV: ${APP_ENV:-dev}
      APP_SECRET: ${APP_SECRET:-xxxxxxxxxxx}
      VERSION: ${VERSION:-1.0.0}
    ports:
      - "8000:80"
    volumes:
      - ./project_server/docker-resources/vhosts:/etc/apache2/sites-enabled
      - ./project_server/:/var/www/html/project
    restart: always
    networks:
      - dev
    depends_on:
      - postgres

  postgres:
    container_name: project_db
    image: postgres:${POSTGRES_VERSION:-16}-alpine
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-xxxx}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-xxxx}
      POSTGRES_USER: ${POSTGRES_USER:-xxxxx}
      POSTGRES_HOST: ${POSTGRES_HOST:-172.17.0.1}
    volumes:
      - database_data:/var/lib/postgresql/data:rw
    ports:
      - "5432:5432"

  angular:
    container_name: project_client
    build: ./project_client/
    restart: on-failure
    command: "npm start"
    depends_on:
      - apache
    networks:
      - dev
    volumes:
      - ../project_client/:/var/www/html/project_client/
    ports:
      - "4200:4200"

networks:
  dev:

volumes:
  database_data:

Angular Dockerfile

FROM node:alpine

WORKDIR /usr/src/app

COPY package.json package-lock.json /usr/src/app/

RUN npm install -g @angular/cli \
    npm install

COPY . /usr/src/app

RUN npm run build

CMD ["ng", "serve", "--open", "--host", "0.0.0.0", "--port 4200"]

Symfony Dockerfile

FROM ubuntu:22.04 as project_base

WORKDIR /var/www/html/project/

RUN apt update

RUN apt -y dist-upgrade

RUN mkdir -p /data
RUN chown -R www-data:www-data /data

RUN mkdir -p /data/docker-files
RUN chown -R www-data:www-data /data/docker-files

COPY ./docker-resources/install-requirements.sh /var/www/html/project/docker-resources/
RUN /bin/bash /var/www/html/project/docker-resources/install-requirements.sh

COPY ./docker-resources/apache2-foreground /usr/local/bin/apache2-foreground
RUN chmod +x /usr/local/bin/apache2-foreground

COPY ./docker-resources/docker-php-entrypoint /usr/local/bin/docker-php-entrypoint
RUN chmod +x /usr/local/bin/docker-php-entrypoint

COPY ./docker-resources/vhosts/project.conf /etc/apache2/sites-available/000-default.conf

COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
COPY ./composer.* /var/www/html/project/

RUN composer install --no-scripts

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

RUN cd /var/www/html/project && \
    composer install --no-scripts --no-cache

EXPOSE 443 80

ENTRYPOINT ["docker-php-entrypoint"]
CMD ["apache2-foreground"]

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
RUN service apache2 restart

FROM project_base as project_dev
COPY ./docker-resources/vhosts/project.conf /etc/apache2/sites-available/000-default.conf

RUN /bin/bash /var/www/html/project/docker-resources/install-requirements-dev.sh

补充信息

  • Angular容器运行状态正常
  • compose.yaml中包含NGINX配置

排查解决方案

1. 端口冲突检查

执行命令检查本地4200端口是否被其他进程占用:

# Linux/macOS
lsof -i :4200

# Windows
netstat -ano | findstr :4200

如果有占用,杀掉对应进程或修改compose.yaml中的端口映射(比如改成4201:4200)。

2. 启动命令冲突修复

compose.yaml中指定的command: "npm start"优先级高于Dockerfile的CMD,需确保npm start对应的启动命令包含--host 0.0.0.0:
查看project_client/package.json的scripts字段:

"scripts": {
  "start": "ng serve --host 0.0.0.0 --port 4200"
}

若未配置,修改后重新构建镜像;或直接删除compose.yaml中的command: "npm start",让容器使用Dockerfile的CMD启动。

3. 路径映射修正

compose.yaml中Angular的卷映射路径与Dockerfile工作目录不匹配,修改为:

volumes:
  - ./project_client/:/usr/src/app/

(compose.yaml位于frontAndBackProjectsFolder下,./project_client/为正确相对路径,原配置的../会指向父目录,导致代码挂载错误)

4. 验证容器内服务状态

进入Angular容器检查服务是否真的启动:

docker exec -it project_client bash
# 检查端口监听
netstat -tulpn | grep 4200
# 手动执行启动命令查看报错
npm run start

若netstat未查到4200端口监听,说明服务未启动,排查npm依赖安装、Angular项目编译是否有报错。

5. 防火墙/安全软件排查

临时关闭本地防火墙、杀毒软件,测试是否能正常访问。


内容的提问来源于stack exchange,提问作者Jully

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:50:08