Ansible Shell无法提取Docker映像
我在使用Ansible的Docker模块从私有DockerHub回购中提取Docker图像时遇到问题,因此为了检查代码是否正常,决定先使用shell尝试提取有问题的图像。这也失败了。这是怎么回事?如果我SSH到这个盒子上,我就能够在shell中运行完全相同的命令,并且它可以工作,拉取正确的映像 单独的示例播放:Ansible Shell无法提取Docker映像,shell,docker,ansible,dockerhub,dockerpy,Shell,Docker,Ansible,Dockerhub,Dockerpy,我在使用Ansible的Docker模块从私有DockerHub回购中提取Docker图像时遇到问题,因此为了检查代码是否正常,决定先使用shell尝试提取有问题的图像。这也失败了。这是怎么回事?如果我SSH到这个盒子上,我就能够在shell中运行完全相同的命令,并且它可以工作,拉取正确的映像 单独的示例播放: --- - hosts: <host-ip> gather_facts: True remote_user: ubuntu sudo: yes tasks:
---
- 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
---
-主持人:
收集事实:真实
远程用户:ubuntu
苏多:是的
任务:
-包括变量:变量/客户变量.yml
-名称:Pull stardog docker图像[私人]
shell:sudo docker pull{{stardog_docker_repo}
-名称:标记stardog docker图像[专用]
shell:sudo docker标签{{stardog\u docker\u repo}}stardog\u标签
正在输出的错误是:
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
失败:[]=>{“更改”:true,“cmd”:“sudo docker pull/:latest”,“delta”:“0:00:01.395931”,“end”:“2015-08-05 17:35:22.480811”,“rc”:1,“start”:“2015-08-05 17:35:21.084880”,“警告”:[]}
stderr:错误:image/:未找到最新版本
标准输出:拉存储库/
致命:所有主机都已失败--正在中止
注意:我已经清理了我的
和
,但请放心,它们在剧本中的图像标识符和错误日志与我可以通过ssh在shell中成功运行的图像完全匹配,方法是:
$ sudo docker pull <org>/<image>:latest
$sudo docker pull/:最新版本
我知道各种GitHub问题(我在使用Docker模块时遇到过)、与
Docker py
库相关的补丁等等,但这里的问题是我只是在使用Ansibleshell
模块。我遗漏了什么?我的一位同事指出了一件事-如果你记录env
,你会发现sudo:yes
默认情况下使root
运行docker命令,因此ubuntu
用户的docker凭证不会被提取。此剧本有效(假设您在docker
文件夹中相对于此剧本有一个有效的dockercfg.json
)
---
- 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
---
-主持人:
收集事实:真实
远程用户:ubuntu
苏多:是的
任务:
-包括变量:变量/客户变量.yml
#运行docker任务
-名称:为ubuntu用户添加docker凭据
复制:src=docker/dockercfg.json dest=/root/.dockercfg
-名称:Get env
外壳:sudo env
注册号码:sudo_env
-名称:调试
调试:msg=“{sudo_env}}”
-名称:Pull stardog docker图像[私人]
外壳:docker pull{{stardog_docker_repo}
-名称:标记stardog docker图像[专用]
shell:docker标签{{stardog\u docker\u repo}}stardog\u标签
这为
root
提供了正确的DockerHub凭据。或者,您可以在每个剧本中添加sudo:false
,并在每个shell
调用中使用sudo内联,以ubuntu
用户身份运行。您应该使用Ansible的docker\u容器
模块现在拉图像
这样,您就不需要在shell中运行sudo
文件对我来说是
~/.docker/config.json
,但这个想法正是我解决问题所需要的,谢谢!