如何获取Docker Compose依赖版本及当前环境镜像列表并同步版本?
1. 如何获取Docker Compose所有依赖的版本列表?
要拿到所有相关的版本信息,分这几个场景操作:
查看Docker Compose自身版本
直接在终端执行这条命令,就能看到Compose的版本,以及配套的Docker引擎版本:
docker compose version
查看当前运行的所有服务镜像版本
如果你的Compose项目已经启动,用这条命令可以列出所有服务对应的镜像名称、标签、ID和大小:
docker compose images
查看Compose文件中定义的镜像版本(含解析后的变量)
如果想确认docker-compose.yml里最终生效的镜像版本(包括从.env里读取的变量),可以用这条命令输出完整的解析后配置,里面能看到每个服务的完整镜像地址和版本:
docker compose config
这个命令会忽略注释,输出所有服务的最终配置,方便你核对每个依赖的版本细节。
2. 如何导出/导入完整环境,确保调试时版本完全一致?
要让同事或者未来的自己复现和你完全一样的环境,需要把镜像、配置、数据都打包好,步骤很清晰:
第一步:导出所有用到的镜像
先把当前Compose项目依赖的所有镜像打包成一个tar文件,这样不用重新拉取,直接导入就能用:
# 导出所有相关镜像到compose_images.tar docker save $(docker compose images -q) -o compose_images.tar
同事拿到这个文件后,执行下面的命令就能把镜像导入到本地Docker:
docker load -i compose_images.tar
第二步:保存最终解析后的Compose配置
原始的docker-compose.yml可能依赖.env里的变量,不同环境的变量可能不一样,导致配置差异。用这条命令导出已经解析所有变量后的最终配置文件:
docker compose config > compose_final.yml
同事可以直接用这个文件启动服务,完全复刻你的配置:
docker compose -f compose_final.yml up -d
第三步:分享环境变量文件(可选但推荐)
如果你的项目用到了.env来存储敏感信息或者动态配置,记得把这个文件也复制一份分享给对方:
cp .env compose_env.env
同事拿到后,把它重命名为.env放到项目目录下即可。
第四步:同步数据卷(如果有持久化数据)
如果你的服务用了Docker卷来保存数据(比如数据库、文件存储),可以把卷里的内容打包导出:
# 示例:导出名为db_data的卷到db_data.tar文件 docker run --rm -v db_data:/data -v $(pwd):/backup alpine tar cvf /backup/db_data.tar /data
导入数据卷的命令如下,会把打包的数据恢复到目标卷里:
docker run --rm -v db_data:/data -v $(pwd):/backup alpine tar xvf /backup/db_data.tar -C / --strip-components 1
第五步:统一Docker和Compose版本
最后,别忘了把你当前的Docker和Compose版本告诉对方,让他们安装相同版本,避免兼容性问题。用这条命令查看版本:
docker compose version
比如输出可能是:
Docker Compose version v2.20.2 Docker Engine - Community Version: 24.0.6 API version: 1.43 Go version: go1.20.7 Git commit: ed223bc Built: Mon Sep 4 12:32:10 2023 OS/Arch: linux/amd64 Context: default
内容的提问来源于stack exchange,提问作者Drathier

