Docker Compose能否用单条命令更新所有已变更镜像?
自动更新Docker Compose中的远程镜像
问题场景
我的compose.yml配置如下:
version: '3.7' services: nginx: restart: unless-stopped image: ghcr.io/user/frontend:latest ports: - 80:80 depends_on: - backend backend: restart: unless-stopped image: ghcr.io/user/backend:latest entrypoint: /home/app/web/wsgi-entrypoint.sh expose: - 8000
我们在GitHub Docker Registry存储了frontend和backend镜像,需求是:当仓库中的镜像更新后,用单条命令自动拉取更新的镜像并重启对应服务,无需手动逐个拉取再重启。
之前尝试执行:
docker-compose up -d --build
但系统提示所有服务都是up-to-date,但实际镜像已经在仓库更新了。目前只能手动先拉取指定镜像,再执行docker-compose up -d --build才能触发服务重建。
原因
docker-compose up -d --build只会检查本地是否存在指定镜像,不会主动去远程仓库校验镜像的最新版本——只要本地有同名标签的镜像,就会判定为“已更新”,忽略远程的新版本。
解决方法
方法1:单条命令拉取所有更新并重启对应服务
docker-compose up -d --pull always
--pull always参数会强制Docker Compose先去远程仓库检查每个服务的镜像是否有更新,拉取最新版本后再重启对应的服务。如果镜像没有更新,服务会保持原样;如果有更新,会自动拉取并重建服务。
方法2:仅更新指定服务
如果只想更新某个特定服务(比如示例中的nginx对应的frontend镜像),可以指定服务名:
docker-compose up -d --pull always nginx
这条命令只会检查nginx服务对应的镜像是否有更新,拉取最新版本后重启该服务,不会影响其他服务。
补充说明
--pull always是Docker Compose 1.23.0及以上版本支持的参数,确保你的版本符合要求。- 如果使用新版的
docker compose(无横杠的CLI),命令格式为:docker compose up -d --pull always
内容的提问来源于stack exchange,提问作者user840718
相关产品推荐
相关产品推荐

