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

同一服务器上UAT与生产环境Docker Compose无法同时启动问题

问题:同一服务器部署UAT与生产环境无法同时运行
  • 同一服务器部署UAT和生产环境,代码一致仅后端端口不同
  • 先启动UAT服务状态正常,启动生产环境后UAT服务自动停止
  • 已设置唯一container_name,问题仍存在

相关配置及版本信息

UAT环境docker-compose.yml

version: "2.2"
services:
  webbackend:
    build: .
    network_mode: "host"
    container_name: atms-webapp-backend-test
    restart: always
    volumes:
      - .:/code
    command:
      "python3.7 app.py --port=5002"
#      "gunicorn --workers=2 --bind=0.0.0.0:9000 utootuweb.wsgi:application"

Dockerfile

FROM ubuntu:18.04

WORKDIR /code
ADD . /code
RUN apt-get update && apt-get upgrade -y && apt-get clean
ENV NODE_VERSION=16.16.0
RUN apt-get install -y curl
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
ENV NVM_DIR=/root/.nvm
RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"
RUN node --version
RUN npm --version
WORKDIR /code/frontend
RUN npm install
RUN npm run build
# RUN npm install -g serve
# RUN serve -s build

# RUN yarn
# RUN yarn build

# # Upgrade installed packages
# RUN apt-get update && apt-get upgrade -y && apt-get clean
# # Python package management and basic dependencies
#
# RUN apt-get install -y curl python3.7 python3.7-dev python3.7-distutils curl
# # node install
# RUN curl -sL https://deb.nodesource.com/setup_18.x | bash -
# RUN apt-get install -y nodejs
# # npm install
# RUN apt install -y npm
# RUN npm install -g npm@latest
#


# Python package management and basic dependencies

RUN apt-get install -y curl python3.7 python3.7-dev python3.7-distutils
# Register the version in alternatives
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1
# Set python 3 as the default python
RUN update-alternatives --set python /usr/bin/python3.7

RUN apt-get install -y build-essential python3.7 python3.7-dev python3-pip python3.7-venv libgl1
RUN apt-get install -y git

# update pip
RUN python3.7 -m pip install pip --upgrade
RUN python3.7 -m pip install wheel
# build frontend
# WORKDIR /code/frontend
#
# RUN npm install
# RUN npm run build
# install backend code
WORKDIR /code
RUN python3.7 -m pip install -r requirements.txt
WORKDIR /code/backend
CMD ["python3" ,"app.py"]

版本信息

  • Docker版本:20.10.10,build b485636
  • docker-compose版本:1.29.2,build 5becea4c

问题原因及解决方法

核心原因

使用network_mode: "host"模式后,容器直接复用宿主机网络栈。此时若两个环境的应用存在端口冲突(即使你以为配置了不同端口,可能代码默认端口未被正确覆盖),后启动的容器会抢占端口,导致先启动的容器被强制停止。此外,host模式几乎丧失网络隔离性,极易引发此类冲突。

解决步骤

  1. 移除network_mode: "host",改用Docker桥接网络

    • 删除docker-compose.yml中的network_mode: "host"配置
    • 添加端口映射,确保两个环境的宿主机端口唯一:
      # UAT环境
      ports:
        - "5002:5002"
      # 生产环境
      ports:
        - "5003:5003"
      
  2. 确认端口配置被正确覆盖

    • 检查app.py中的默认端口设置,确保启动命令的--port=xxx参数能完全覆盖默认值
    • 避免硬写固定端口,优先通过命令行参数或环境变量传递端口
  3. 可选:为环境创建独立Docker网络
    进一步隔离两个环境的网络:

    # 创建UAT专属网络
    docker network create uat-network
    # 创建生产专属网络
    docker network create prod-network
    

    在各自的docker-compose.yml中添加:

    networks:
      default:
        external:
          name: uat-network # 生产环境替换为prod-network
    
  4. 验证服务运行
    先停止所有相关容器:

    docker-compose down
    

    分别启动UAT和生产环境服务,通过docker ps确认两个服务同时运行且无端口冲突。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:26:03