我遇到了使用Ansible的Docker模块从私有的DockerHub回购中提取Docker映像的问题,因此,为了正确起见,请检查代码是否决定首先使用shell来提取所讨论的图像。这也失败了。这里发生了什么事?如果我把SSH放到这个盒子上,我就能够在shell中运行完全相同的命令,并且它可以工作,拉出正确的图像。
孤立的例子游戏:
---
- hosts: <host-ip>
gather_facts: True
remote_user: ubuntu
sudo: yes
tasks:
- include_vars: vars/client_vars.yml
- name: Pull stardog docker image [private]
shell: sudo docker pull {{stardog_docker_repo}}
- name: Tag stardog docker image [private]
shell: sudo docker tag {{stardog_docker_repo}} stardog_tag正在输出的错误是:
failed: [<host-ip>] => {"changed": true, "cmd": "sudo docker pull <org>/<image>:latest", "delta": "0:00:01.395931", "end": "2015-08-05 17:35:22.480811", "rc": 1, "start": "2015-08-05 17:35:21.084880", "warnings": []}
stderr: Error: image <org>/<image>:latest not found
stdout: Pulling repository <org>/<image>
FATAL: all hosts have already failed -- aborting注意:我已经对我的<org>和<image>进行了消毒,但请放心,它们在剧本中的图像标识符和错误记录完全符合我可以通过ssh在shell中成功运行的映像:
$ sudo docker pull <org>/<image>:latest我知道各种GitHub问题(我在使用Docker模块时遇到了就像这个)、与docker-py库相关的补丁等等,但这里的问题是,我只是在使用Ansible shell模块。我错过了什么?
发布于 2015-08-05 17:38:18
我的一位同事指出了一些问题--如果您记录env,您会发现sudo: yes使root默认运行停靠命令,因此不会获取ubuntu用户的docker凭据。此剧本有效(假设相对于此剧本,您在dockercfg.json文件夹中有一个有效的docker )。
---
- hosts: <host-ip>
gather_facts: True
remote_user: ubuntu
sudo: yes
tasks:
- include_vars: vars/client_vars.yml
# run the docker tasks
- name: Add docker credentials for ubuntu user
copy: src=docker/dockercfg.json dest=/root/.dockercfg
- name: Get env
shell: sudo env
register: sudo_env
- name: Debug
debug: msg="{{sudo_env}}"
- name: Pull stardog docker image [private]
shell: docker pull {{stardog_docker_repo}}
- name: Tag stardog docker image [private]
shell: docker tag {{stardog_docker_repo}} stardog_tag这给了root正确的DockerHub creds。或者,您可以将sudo: false添加到每个播放中,并在每个shell调用上使用sudo内联作为ubuntu用户运行。
发布于 2017-11-03 07:08:00
您现在应该使用Ansible的docker_container模块来提取图像。
这样,您不需要在shell中运行sudo。
module.html
https://stackoverflow.com/questions/31838382
复制相似问题