使用Ansible部署Docker映像

4

浏览了这个惊人的论坛之后,我认为是时候加入了...

我遇到了一个部署多个Docker容器的playbook问题。

  • 我的Ansible版本为:2.5.1
  • 我的Python版本为3.6.9
  • 我的Linux映像来自OSboxes网站,版本为18.04。

在两台机器上安装并运行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个回答

6

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

您可以使用2.8或更高版本,或者只需从您的playbook中删除该行,然后它应该可以工作:

- 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 }}"

我会在谷歌上搜索如何将我的Ansible升级到你所提到的版本,希望这能解决我的问题。感谢你的回答。 - Nahum

1

终于,成功让这个playbook运行起来了!:)

我做了以下操作:

  1. 升级了Ansible版本,现在它的版本为:2.9.15.
  2. 我的python3版本是:3.6.9

在将Ansible升级到上述版本后,我收到了一个错误消息:无法在osboxes(这是我的机器)中导入所需的python库(Docker SDK for Python(python>= 2.7)或docker-py(python 2.6))python...

因此,在搜索了这个错误后,我找到了这个URL:

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

我决定从我的计算机上删除Docker,包括使用pip安装的Python(我使用命令pip-list查看是否安装了Docker,并使用pip uninstall将其删除)。
在删除Docker后,我新增了一个playbook,安装docker-compose解决了我的问题,并处理了Python版本问题。
只需按照我回答中附带的URL进行操作即可。

1
根据Ansible 2.5的docker_image模块文档,确实没有source参数。然而,版本2.9的文档告诉我们它已经在“2.8中添加了”!因此,您必须更新您的Ansible版本才能按原样运行链接的playbook。这是最好的选择。否则,另一个选择是保留您的2.5版本并简单地删除第38行。
(-)        source: pull

但是我不知道在2.8之前的默认行为是什么,所以我不能保证它会按照您的期望工作!


感谢您抽出时间回复我的帖子。我会升级Ansible并汇报结果。 - Nahum
感谢您抽出时间回复我的帖子。我会升级Ansible并汇报结果的。(我想知道他在视频中用的是哪个版本... :)) - Nahum

0
根据Ansible模块docker_image中的错误消息,似乎使用了一个参数,该参数不是该模块实现的参数之一(尚未实现)。此外,错误消息已列出可用的参数。与模块文档中相同。
另一个可能的原因是某些参数的行缩进不正确。

我会在谷歌上搜索如何将我的Ansible升级到你提到的版本,希望这能解决我的问题。 - Nahum
谢谢您抽出时间回答我的帖子。我会升级Ansible并回复结果。(我想知道他在视频中用的是哪个版本... :) - Nahum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接