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




