我遇到了一个问题,那就是用一个来自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\")"}
有什么区别?我没听懂这两部分的标准体积相同。
答案 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 }}'