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

Docker Compose v3拆分SQL Server服务与独立数据镜像的配置方法

问题解答

核心结论

Docker Compose v3版本已官方废弃volumes_from属性,不推荐用该属性实现需求,最优方案为独立数据镜像 + 共享命名卷的拆分方式,完全满足你单独拉取数据镜像、不依赖服务镜像的要求。

具体操作步骤

步骤1:制作专用数据镜像

数据镜像仅用于存储数据,用极小的busybox作为基础镜像,整体体积不到2M,远小于SQL Server的服务镜像。
在当前目录下新建data/Dockerfile,内容如下:

FROM busybox:latest
# 声明和SQL Server数据路径一致的挂载点
VOLUME /var/opt/mssql/data
# 保持容器后台运行不退出,方便挂载调用
CMD ["tail", "-f", "/dev/null"]

步骤2:修改docker-compose配置

拆分服务为数据容器和SQL Server服务容器两部分,配置如下:

version: '3.4'

# 声明全局共享命名卷,用于两个容器之间的数据同步
volumes:
  sqlserver-data:

services:
  # 数据容器:仅负责数据存储,无服务逻辑
  sqlserver-data:
    build: ./data
    container_name: MsSqlServer_Data
    volumes:
      - sqlserver-data:/var/opt/mssql/data

  # 服务容器:仅运行SQL Server服务,不存储持久化数据
  sqlserver:
    image: mcr.microsoft.com/mssql/server
    container_name: MsSqlServer
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=Password_01
    ports:
      - "1433:1433"
    volumes:
      - sqlserver-data:/var/opt/mssql/data
    depends_on:
      - sqlserver-data

步骤3:日常使用操作

  • 首次启动:执行docker compose up -d,会自动构建数据镜像、依次启动数据容器和服务容器
  • 打包数据镜像:备份前先停止SQL Server服务避免写入损坏,执行docker stop MsSqlServer,再执行docker commit MsSqlServer_Data sqlserver-data:备份版本号即可生成独立的数据镜像,可直接推送到镜像仓库存储,拉取时仅拉取该数据镜像即可
  • 更新服务镜像:直接拉取最新版SQL Server官方镜像,执行docker compose up -d --no-deps sqlserver重启服务即可,完全不影响数据容器内容

Docker Compose v3下其他可行方案

  • 本地绑定挂载+独立备份镜像:保留你原有本地磁盘挂载的逻辑,额外做一个专用备份镜像,定期把本地/tmp/docker-volumes/db的内容打包为镜像,适合需要直接在本地查看数据文件的场景
  • 第三方卷插件:使用local-persist等Docker卷插件,将命名卷和镜像绑定分发,适合多节点集群的大规模部署场景,复杂度相对更高

内容的提问来源于stack exchange,提问作者Jakub Janiš

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:24:00