Docker Ansible:';项目';是未定义的

Docker Ansible:';项目';是未定义的,docker,ansible,ansible-playbook,Docker,Ansible,Ansible Playbook,我正在尝试使用with_itemswithdelegate_to在多个主机中运行Docker容器。我在/etc/ansible/hosts中有一个组测试: [test] my_machine1 my_machine2 这项任务是: - name: Run app container docker: name: "{{artifact_id}}" insecure_registry: true image: "{{image}}:{{version}

我正在尝试使用
with_items
with
delegate_to
在多个主机中运行Docker容器。我在
/etc/ansible/hosts
中有一个组
测试

[test]
my_machine1
my_machine2
这项任务是:

 - name: Run app container
    docker:
      name: "{{artifact_id}}"
      insecure_registry: true
      image: "{{image}}:{{version}}"
      pull: always
      state: reloaded
      ports:
      - "{{port_mapping}}"
      delegate_to: '{{item}}'
      with_items:
      - "{{groups['test']}}"
但当我运行它时,我会得到以下错误:

{“failed”:true,“msg”:“ERROR!'item'未定义”}

我做错了什么


提前感谢

您需要注意缩进<代码>委托给和带有项目的是任务的一部分,而不是docker模块的一部分

- name: Run app container
  docker:
    name: "{{artifact_id}}"
    insecure_registry: true
    image: "{{image}}:{{version}}"
    pull: always
    state: reloaded
    ports:
      - "{{port_mapping}}"
  delegate_to: '{{item}}'
  with_items: "{{groups['test']}}"
虽然我不确定你们的代表团会在这里工作。您首先需要授权的背景是什么?通常的方法是将播放应用于组
测试的主机。我猜你是在和本地主机比赛

另一件不相关的事情:当
pull:always
state:reload
一起使用时,我遇到了docker模块的问题。与docker compose不同,docker模块将始终重新启动容器,无论是否提取了更新的图像



你的格式好像不正确。你能把问题格式化为yaml以避免混淆吗?哈哈,这就是问题所在!“委托给”和“与”项不是docker模块的属性,而是任务本身的属性-。-“谢谢。非常感谢。它解决了问题。是的,我在localhost中运行了几个操作(从nexus下载映像并构建它)最后一个,即运行容器,必须在
test
机器中执行。我应该用另一种方式执行吗?谢谢。您可以添加第二个播放。第一个播放构建您的图像并(我猜将其上载到私有注册表)。第二个剧本运行docker模块。我在上面添加了一个虚拟示例剧本。但我看到了授权对您的意义。如果授权确实有效,如果您喜欢,请尝试。太好了。再次感谢您。
- hosts: localhost
  tasks:
    - download nexus
    - build image
    - upload to registry
    - ...
- hosts: test
  tasks:
    - docker: ...