【问题标题】:Ansible Docker exec failed with docker not found in path?Ansible Docker exec 失败,路径中找不到 docker?
【发布时间】:2019-05-31 12:22:47
【问题描述】:

使用 docker 和 ansible,模拟一个 docker exec 进程失败,出现一个尴尬的错误

---
- hosts: centos
  become: true
  tasks:
    - name: create jenkins container
      docker_container:
        name: my_jenkins
        image: jenkins

    - name: add container to inventory
      add_host:
        name: my_jenkins
        ansible_connection: docker
        ansible_user: jenkins
      changed_when: false

    - name: create directory for ssh keys
      delegate_to: my_jenkins
      file:
        path: "/var/jenkins_home/.ssh/jupiter"
        state: directory

错误

TASK [create directory for ssh keys] ***********************************************************************************
fatal: [apollo]: FAILED! => {"msg": "docker command not found in PATH"}

【问题讨论】:

  • 这似乎是一个非常明显的错误。 (docker_container 模块使用 Python 库直接与 Docker 守护进程交互。)你认为你有 /usr/bin/docker 或类似的吗?在容器启动时使用绑定挂载注入该目录会更好吗?

标签: docker ansible


【解决方案1】:

"docker command not found in PATH" 表示 Ansible 尝试执行 docker 命令但找不到 docker 可执行文件。 echo $PATH 查看当前目录。搜索可执行文件的路径。

鉴于 Ansible 能够完成第 1 步和第 2 步,我的假设是 docker 守护进程确实安装成功。所以

  1. 将 Docker 守护程序的路径添加到系统 $PATH 安装中。

  2. Docker 到已包含在 $PATH 中的路径中。

希望这会有所帮助。

【讨论】:

  • docker 客户端和 dockerd 守护进程都在路径 /usr/bin 中,所以它们都可供所有用户使用,我猜对于 python 来说。
  • 执行用户 Ansible 在远程机器上使用的 'which docker'。我认为用户可能无法访问二进制文件。
猜你喜欢
  • 1970-01-01
  • 2019-04-28
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2018-05-29
相关资源
最近更新 更多