如何在同一docker-compose文件中部署两个现有容器
双容器统一部署实现方案
你只需要将现有独立运行的SQL Server容器配置合并到微服务项目的docker-compose文件中,就能达到和双服务同文件配置完全一致的运行效果,具体操作步骤如下:
前置准备:备份现有DB容器中的业务数据,之后停止并移除手动创建的独立DB容器,避免端口、网络冲突
docker stop <你当前运行的DB容器名称> docker rm <你当前运行的DB容器名称>如果你之前给DB容器配置了持久化数据卷,不需要删除原有数据卷,后续可以直接复用。
修改微服务项目下的
docker-compose.yml,在services节点下新增SQL Server服务配置,和原有微服务配置做关联,参考可直接运行的配置模板:version: '3.8' services: # 保留你原有微服务的所有配置,仅做关联调整 your-microservice: build: . ports: - "8080:80" - "8081:443" depends_on: mssql: condition: service_healthy environment: # 关键:数据库地址不要写localhost/127.0.0.1,直接用服务名mssql,compose内部会自动做DNS解析 - ConnectionStrings__Default=Server=mssql;Database=你的业务库名;User Id=sa;Password=YourStrong!Passw0rd;TrustServerCertificate=True; networks: - app-network # 新增SQL Server服务配置,和你之前手动创建容器的参数保持一致即可 mssql: image: mcr.microsoft.com/mssql/server:2022-latest # 如果不需要从容器外直接连接数据库,可以删除1433端口映射,提升安全性 ports: - "1433:1433" environment: - ACCEPT_EULA=Y - SA_PASSWORD=YourStrong!Passw0rd # 必须符合SQL Server密码复杂度要求:8位以上、包含大小写字母+数字+特殊符号 - MSSQL_PID=Developer volumes: # 复用旧数据卷就填你之前创建的卷名,新部署直接写自定义卷名即可 - mssql-data:/var/opt/mssql networks: - app-network restart: unless-stopped # 健康检查配置,避免微服务在DB未完成初始化时启动导致连接失败 healthcheck: test: /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P YourStrong!Passw0rd -Q "SELECT 1" interval: 10s timeout: 3s retries: 10 # 声明持久化卷和内部网络 volumes: mssql-data: networks: app-network: driver: bridge配置完成后,在
docker-compose.yml所在目录执行启动命令即可完成统一部署:docker-compose up -d部署验证:执行
docker-compose ps查看服务状态,当两个服务状态均显示为Up时,测试微服务接口的数据库读写功能,正常即部署完成。
常见踩坑提示:如果微服务侧没有配置数据库连接重试策略,不要删除健康检查相关配置,否则大概率会出现微服务启动时数据库还未初始化完成、连接报错的问题。
内容的提问来源于stack exchange,提问作者astroxnd
相关产品推荐
相关产品推荐

