能否在docker-compose中指定本地.tar格式Docker镜像文件路径作为镜像?
本地tar镜像通过docker-compose导入的实现方法
docker-compose原生没有直接导入本地tar镜像的配置项,但是可以通过两种通用方案实现需求:
方案1:使用build配置关联本地tar(适合固定集成到构建流程的场景)
- 步骤1:将本地镜像tar包放到docker-compose.yaml同级目录,示例文件名为
custom-app.tar - 步骤2:在docker-compose.yaml中配置build规则,直接从tar包加载镜像:
version: '3.8' services: your-service: build: context: . dockerfile_inline: | FROM scratch ADD custom-app.tar / image: custom-app:latest # 定义导入后的镜像名称标签 # 补充服务的其他配置,比如ports、volumes等
- 步骤3:执行
docker-compose up --build即可自动加载tar镜像并启动服务,后续启动不需要重复加--build参数,只要本地镜像存在就会直接调用。
方案2:使用一次性辅助服务执行导入(适合不想改动原有服务配置的场景)
直接在原有docker-compose.yaml中新增一个临时的导入服务,执行导入命令,利用docker sock挂载实现宿主机docker命令的调用:
version: '3.8' services: import-image: image: docker:latest volumes: - /var/run/docker.sock:/var/run/docker.sock - ./custom-app.tar:/custom-app.tar command: docker import /custom-app.tar custom-app:latest # 原有业务服务 your-service: image: custom-app:latest depends_on: import-image: condition: service_completed_successfully # 其他服务配置
- 执行
docker-compose up时会先运行导入服务,完成镜像导入后自动启动业务服务,导入服务只会执行一次就退出,不会占用资源。
注意:两种方案都需要保证tar包的路径和配置中的路径一致,如果tar包是用
docker save导出的,需要把方案1的ADD改成COPY,方案2的command改成docker load -i /custom-app.tar即可,要和导出镜像的命令匹配:docker save导出的包用docker load导入,docker export导出的包用docker import导入。
内容的提问来源于stack exchange,提问作者Suyog Shimpi
相关产品推荐
相关产品推荐

