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

如何配置Docker实现容器启动时自动运行Node.js项目的前后端服务

解决方案

问题根因

你当前配置无法自动启动服务的核心原因是:Dockerfile 中的RUN指令仅在镜像构建阶段执行,构建过程中启动的 pm2 进程不会被保留到容器运行阶段;pm2 save生成的进程列表虽然存在于镜像中,但你没有配置容器启动时加载该列表的命令,因此容器启动后没有服务在后台运行。

配置修改方案

1. 调整Dockerfile配置

删除冗余的构建阶段启动命令,新增pm2进程配置文件和容器启动指令,修改后的完整Dockerfile如下:

FROM imagensoportep

RUN mkdir -p /home/soporte
COPY soporte /home/soporte

# 编译后端
WORKDIR /home/soporte/backend
RUN npm install \
    && npm run build \
    && npm install -g pm2

# 编译前端
WORKDIR /home/soporte/frontend
RUN npm install \
    && npm run build

# 生成pm2固定进程配置文件,比动态save更稳定
RUN echo '\
module.exports = {\
  apps : [\
    {\
      name: "soporte-backend",\
      script: "dist/server.js",\
      cwd: "/home/soporte/backend"\
    },\
    {\
      name: "soporte-frontend",\
      script: "server.js",\
      cwd: "/home/soporte/frontend"\
    }\
  ]\
}' > /home/soporte/ecosystem.config.js

EXPOSE 3000
EXPOSE 8080

# 容器启动指令:用pm2-runtime前台运行服务,保证容器主进程不退出
CMD ["pm2-runtime", "start", "/home/soporte/ecosystem.config.js"]

2. docker-compose.yml无需修改

你当前的docker-compose.yml配置已经符合要求,不需要调整。

3. 生效验证

执行以下命令重新构建镜像并启动容器即可:

docker-compose up -d --build

容器启动后会自动运行前后端两个服务,你可以直接访问3000、8080端口验证,也可以进入容器执行pm2 list查看服务运行状态。

可选优化方案(符合Docker最佳实践)

如果后续需要更灵活的运维,推荐将前后端拆分为两个独立的容器,在docker-compose.yml中分别配置前端、后端两个服务,遵循Docker单进程原则,更方便后续的扩容、版本升级和故障排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:06