使用合并的清单启动Docker容器的清单

时间:2020-07-10 12:08:29

标签: docker ansible

我遇到了一个问题,那就是用一个来自ansible组合列表的卷启动一个docker容器。

默认情况下定义了一个列表,因此每个容器都需要:

  standardvolumes:
    - '/usr/share/zoneinfo:/usr/share/zoneinfo'

可以在group_vars.yml中为主机组定义其他列表,但不必如此。这是定义示例的示例:

  volumes:
    - '/usr/data:/data'
    - '/usr/data2:/data2'
    - '/etc/pki/ca-trust/extracted/pem:/etc/pki/ca-trust/extracted/pem'

现在,我结合使用“ standardvolumes”和“ volumes”来使用一个列表进行docker部署:

  - name: Combine volume lists
    set_fact:
      volumestostart: "{{ standardvolumes|default([]) + volumes|default([]) }}"

由于不需要定义“体积”,因此我使用的是default([])东西。

这是我的docker部署任务:

  - name: Startup a new startable Container
    docker_container:
      name: '{{ service }}'
      image: '{{ pathtoimage }}:{{ release }}'
      published_ports: '{{ publishlines }}'
      volumes:
        - '{{ volumestostart }}'
      env:
        TZ: "{{ timezone }}"
      env_file: '/etc/sysconfig/{{ service }}.list'
      etc_hosts: '{{ hostsentries }}'

现在,当我部署定义了“ standardvolumes”和“ volumes”的容器时,一切都很好。但是,当我部署未定义“体积”的容器时,会出现此错误:

failed: [shs_de_postd_server1] (item={u'key': u'qit', u'value': {u'cgrouptype': u'blech', u'nexususer': u'cbs-qit-user', u'notstartable': u'no', u'nexuspassword': u'48vhw63u', u'nexusport': u'8191', u'nexuspath': u'ftg/postd-server', u'graylogip': u'tcp://10.20.30.40:12201'}}) => {"ansible_loop_var": "item", "changed": false, "item": {"key": "qit", "value": {"cgrouptype": "blech", "graylogip": "tcp://10.20.30.40:12201", "nexuspassword": "48vhw63u", "nexuspath": "ftg/postd-server", "nexusport": "8191", "nexususer": "cbs-qit-user", "notstartable": "no"}}, "msg": "Error creating container: 400 Client Error: Bad Request (\"create ['/usr/share/zoneinfo: \"['/usr/share/zoneinfo\" includes invalid characters for a local volume name, only \"[a-zA-Z0-9][a-zA-Z0-9_.-]\" are allowed. If you intended to pass a host directory, use absolute path\")"}

有什么区别?我没听懂这两部分的标准体积相同。

1 个答案:

答案 0 :(得分:1)

发现错误,可以正常工作:

  - name: Startup a new startable Container
    docker_container:
      name: '{{ service }}'
      image: '{{ pathtoimage }}:{{ release }}'
      published_ports: '{{ publishlines }}'
      volumes: '{{ volumestostart }}'
      env:
        TZ: "{{ timezone }}"
      env_file: '/etc/sysconfig/{{ service }}.list'
      etc_hosts: '{{ hostsentries }}'