我一直在使用 jenkins 构建 docker 镜像并每次都使用最新的标签推送到 docker hub。
我已经编写了一个 ansible 剧本,它将通过从 docker hub 拉取最新图像来部署 docker 图像。现在的问题是,一旦它部署了具有相同标签的先前版本,新的最新图像就没有被 ansible 拉取。你能检查一下剧本吗?让我知道我应该更新哪个部分以获得所需的工作。
剧本:
---
- hosts: flask04
tasks:
- name: Pull Flask app image
docker_image:
name: taybur/flaskapp_27032019
tag: latest
state: present
- name: remove flask app container
docker_container:
name: first_flaskapp
image: taybur/flaskapp_27032019
state: absent
- name: Create flask app container
docker_container:
name: first_flaskapp
image: taybur/flaskapp_27032019
ports:
- "5001:5001"
state: started
最佳答案
docker_image
模块将不是 如果图像已经存在,则自动拉取图像。您必须使用 force_source: yes
参数(带有 source: pull
)以强制每次运行时拉动。
备注 : 在 ansible 2.8 之前,参数是 force: yes
.它已在 2.9 中弃用并在 2.12 中删除。提source: pull
也是强制性的,因为该版本
此外,docker_container
如果图像不存在,可以为您提取图像。您可以告诉它尝试在每次运行( pull: true
)并在需要时重新启动容器。因此,在这种情况下,您可以将一组任务减少为一个:
- name: Create/Update the flask app container if needed
docker_container:
name: first_flaskapp
image: taybur/flaskapp_27032019
pull: true
ports:
- "5001:5001"
state: started
见模块文档 docker_container和 docker_image更进一步:
restart_policy: always
如果你需要这个功能。 pull
带有变量的参数动态,您将在命令行上用作额外的变量: - name: Create/Update the flask app container if needed
docker_container:
name: first_flaskapp
image: taybur/flaskapp_27032019
pull: "{{ upgrade_flaskapp | default(false) | bool }}"
restart_policy: always
ports:
- "5001:5001"
state: started
现在,如果您正常运行 playbook,它将:如果您使用
ansible-playbook -i <inventory> playbook.yml -e upgrade_flaskapp=true
运行它会:关于docker - 我的剧本没有下载具有相同标签名称的更新图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55429231/