使用Ansible部署Docker映像

时间:2020-11-05 09:10:38

标签: docker ansible

在审查了这个令人惊叹的论坛之后,我认为是时候加入...

我在部署多个Docker的剧本上遇到问题。

  • 我的 Ansible 版本是:2.5.1
  • 我的 Python 版本是3.6.9
  • 我的Linux映像来自以下站点:18.04: OSboxes

Docker服务已在两台机器上安装并运行。

根据此网站,您需要做的就是按照说明进行操作,一切都会正常进行。 :)

https://www.techrepublic.com/article/how-to-deploy-a-container-with-ansible/

(我使用的剧本在上面的链接中)

但是在按照步骤操作并使用了剧本之后,我遇到了这个错误。

TASK [Pull default Docker image] ******************************************************************************************************
fatal: [192.168.1.38]: FAILED! => {"changed": false, "msg": "Unsupported parameters for (docker_image) module: source Supported parameters include: api_version, archive_path, buildargs, cacert_path, cert_path, container_limits, debug, docker_host, dockerfile, filter_logger, force, http_timeout, key_path, load_path, name, nocache, path, pull, push, repository, rm, ssl_version, state, tag, timeout, tls, tls_hostname, tls_verify, use_tls"}

很高兴您在此问题上的支持。

4 个答案:

答案 0 :(得分:5)

Ansible 2.8中添加了source: pull选项。由于您使用的是Ansible 2.5.1,因此该选项不可用。

您可以使用2.8或更高版本,也可以仅从剧本中删除该行,即可使用:

- name: Pull default Docker image
  docker_image:
    name: "{{ default_container_image }}"

您将无法保证已从注册表中新提取图像。如果这对您来说很重要,则可以先删除该图像的任何本地缓存版本:

- name: Remove Docker image
  docker_image:
    name: "{{ default_container_image }}"
    state: absent

- name: Pull default Docker image
  docker_image:
    name: "{{ default_container_image }}"

答案 1 :(得分:1)

因此,根据Ansible 2.5的doc of docker_image模块,确实没有参数source

尽管如此,doc of version 2.9告诉我们它已经“增加了2.8”!因此,您必须更新Ansible版本,才能按原样运行链接的剧本。那是您最好的选择。

否则,另一种选择是保留版本2.5并简单地删除第38行。

(-)        source: pull

但是我不知道2.8之前的默认行为如何,所以我无法保证您会达到预期的效果!

答案 2 :(得分:1)

最后,让这本剧本唱歌! :)

我做了以下事情。

  1. 升级了Ansibe版本,因此现在可以在2.9.15版本上运行。
  2. 我的python3版本是:3.6.9

将Ansible升级到上面提到的版本后,我得到了以下错误消息:无法导入所需的python库(适用于Python的Docker SDK(python> == 2.7)或docker-py(python 2.6))在 osboxes (这是我的机器)上python ...

因此,在搜索了此错误之后,我找到了以下URL:

https://neutrollized.blogspot.com/2018/12/cannot-have-both-docker-py-and-docker.html

因此,我决定从我的计算机中删除docker,包括使用pip安装的python(我使用pip-list命令查看是否安装了docker,然后使用以下命令将其删除:pipuninstall)。

>

从我的机器上删除Docker之后,我又将剧本添加了一个剧本。安装docker-compose(这就是解决我的问题的方法,它负责处理python版本)。

只需遵循我在答案中附加的网址即可。

答案 3 :(得分:0)

根据Ansible模块docker_image中的错误消息,似乎使用了一个参数,该参数尚未为该模块实现(但)。错误消息还列出了可用的参数。与documentation for the module中相同。

另一个可能的原因可能是某些参数的行缩进不正确。