You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ansible Playbook无法拉取同标签更新Docker镜像问题咨询

解决Ansible无法拉取最新Docker latest镜像的问题

这问题我之前也碰到过!核心原因是Ansible的docker_image模块默认不会主动去远程仓库检查latest标签的镜像是否有更新——只要本地已经存在这个tag的镜像,它就会跳过拉取操作。咱们只需要修改Pull Flask app image这一步的配置就行,同时可以优化后续的容器操作来确保用的是新镜像。

修改后的Playbook

---
- hosts: flask04
  tasks:
    - name: Pull Flask app image (强制拉取最新的latest镜像)
      docker_image:
        name: taybur/flaskapp_27032019
        tag: latest
        state: present
        pull: yes
        force_source: yes  # 远程镜像内容更新但标签不变时,强制覆盖本地旧镜像
    - name: Stop and remove flask app container
      docker_container:
        name: first_flaskapp
        state: absent
    - name: Create and start flask app container with latest image
      docker_container:
        name: first_flaskapp
        image: taybur/flaskapp_27032019:latest
        ports:
          - "5001:5001"
        state: started

关键修改点说明

  • 添加pull: yes:明确告诉Ansible要从远程仓库拉取镜像,而不是只依赖本地已有的镜像文件。
  • 添加force_source: yes:针对latest这种固定标签,当远程仓库的镜像内容已经更新但标签没变化时,强制拉取并覆盖本地旧的同标签镜像(不加这一项的话,Ansible会认为本地已有latest镜像,直接跳过拉取)。
  • 容器启动时指定完整镜像标签:虽然不指定也能运行,但明确写taybur/flaskapp_27032019:latest可以避免歧义,让配置逻辑更清晰。

另外,你也可以把容器的停止删除和启动合并成一步,让Playbook更简洁:

- name: Recreate flask app container with latest image
  docker_container:
    name: first_flaskapp
    image: taybur/flaskapp_27032019:latest
    ports:
      - "5001:5001"
    state: started
    recreate: yes  # 只要镜像有更新,就自动重新创建容器

这样修改后,每次运行Playbook时,Ansible都会先检查并拉取最新的latest镜像,然后确保容器使用的是刚拉取的新镜像。

内容的提问来源于stack exchange,提问作者Taybur Rahman

火山引擎 最新活动