2

我遇到了使用 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库相关的问题,但这里的问题是我只是在使用 Ansibleshell模块。我错过了什么?

4

2 回答 2

3

我的一位同事指出了一些事情 - 如果您登录env,您会发现make 默认运行sudo: yesdockerroot命令,因此ubuntu不会获取用户的 Docker 凭据。这个剧本有效(假设你在文件夹中有一个有效dockercfg.jsondocker,相对于这个剧本。

---
- 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 信誉。或者,您可以添加sudo: false到每个播放中,并在每次shell调用时使用 sudo inline 以ubuntu用户身份运行。

于 2015-08-05T17:38:18.807 回答
2

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

这样,你就不需要在 shell 中运行 sudo 了。

http://docs.ansible.com/ansible/docker_container_module.html

于 2017-11-03T07:08:00.413 回答