首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无壳不能拉码头图像

无壳不能拉码头图像
EN

Stack Overflow用户
提问于 2015-08-05 16:46:48
回答 2查看 4.6K关注 0票数 2

我遇到了使用Ansible的Docker模块从私有的DockerHub回购中提取Docker映像的问题,因此,为了正确起见,请检查代码是否决定首先使用shell来提取所讨论的图像。这也失败了。这里发生了什么事?如果我把SSH放到这个盒子上,我就能够在shell中运行完全相同的命令,并且它可以工作,拉出正确的图像。

孤立的例子游戏:

代码语言:javascript
复制
---
- 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

正在输出的错误是:

代码语言:javascript
复制
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中成功运行的映像:

代码语言:javascript
复制
$ sudo docker pull <org>/<image>:latest

我知道各种GitHub问题(我在使用Docker模块时遇到了就像这个)、与docker-py库相关的补丁等等,但这里的问题是,我只是在使用Ansible shell模块。我错过了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-08-05 17:38:18

我的一位同事指出了一些问题--如果您记录env,您会发现sudo: yes使root默认运行停靠命令,因此不会获取ubuntu用户的docker凭据。此剧本有效(假设相对于此剧本,您在dockercfg.json文件夹中有一个有效的docker )。

代码语言:javascript
复制
---
- 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用户运行。

票数 3
EN

Stack Overflow用户

发布于 2017-11-03 07:08:00

您现在应该使用Ansible的docker_container模块来提取图像。

这样,您不需要在shell中运行sudo。

module.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31838382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档