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

如何用Docker在单服务器实现Dev、Staging、Production环境独立运行?

Docker多环境独立运行解决方案

容器被替换的核心原因是:docker-compose默认以当前目录名作为项目名称,不同环境启动时共用同一个项目名,导致服务实例被覆盖。要实现三个环境独立运行,只需给每个环境指定唯一项目名,并正确加载对应环境变量文件即可。

核心解决步骤

1. 为每个环境指定唯一项目名

使用docker-compose的-p参数(或COMPOSE_PROJECT_NAME环境变量),给Dev、Staging、Production分别设置不同的项目标识,比如myapp-dev、myapp-staging、myapp-prod。

2. 加载对应环境的.env文件

通过--env-file参数指定要加载的环境变量文件,替代默认的.env。

完整启动命令示例

  • 开发环境(Dev)
docker-compose -p myapp-dev --env-file .env.dev -f docker-compose.yml -f docker-compose.dev.yml up -d --build
  • 预发布环境(Staging)
docker-compose -p myapp-staging --env-file .env.staging -f docker-compose.yml -f docker-compose.staging.yml up -d --build
  • 生产环境(Production)
docker-compose -p myapp-prod --env-file .env.prod -f docker-compose.yml -f docker-compose.prod.yml up -d --build

后续操作注意事项

  • 停止某个环境的服务时,必须带上对应项目名参数:
    # 停止开发环境服务
    docker-compose -p myapp-dev down
    
  • 查看某个环境的运行状态:
    # 查看预发布环境容器状态
    docker-compose -p myapp-staging ps
    
  • 端口映射避免冲突:确保三个环境的端口映射不重复(比如Dev用8080,Staging用8081,Production用80),否则会启动失败。

优化建议

可以把每个环境的启动命令封装成shell脚本,比如:

  • start-dev.sh
#!/bin/bash
docker-compose -p myapp-dev --env-file .env.dev -f docker-compose.yml -f docker-compose.dev.yml up -d --build
  • start-staging.sh
#!/bin/bash
docker-compose -p myapp-staging --env-file .env.staging -f docker-compose.yml -f docker-compose.staging.yml up -d --build

赋予脚本执行权限后,直接运行脚本即可启动对应环境,避免重复输入长命令。

内容的提问来源于stack exchange,提问作者Donny Akhmad Septa Utama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:45:34