You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac下使用Ansible docker_login模块报错:获取服务器API版本失败

Mac上Ansible docker_login模块连接Docker失败的解决方案

问题描述

在Mac系统上使用Ansible的docker_login模块登录私有Docker镜像仓库时失败,但该操作在最新版Ubuntu系统上可正常运行。

错误信息

"changed": false, "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))"

已尝试操作

已通过pip安装docker、docker-py和requests模块,但问题未解决。

我的Ansible代码

- name: Login to Docker Registry
  hosts: localhost
  tasks:  

    - name: Install docker
      pip:
        name: docker
        
    - name: Install requests
      pip:
        name: requests

    - name: login
      docker_login:
        registry: "registryhidden"
        username: "user"
        password: "password"

    - name: Pull image
      docker_image:
        name: registryhidden/hellow-world:2.2.0
        source: pull

Docker信息

Docker info
Client:
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc., v0.10.0)
  compose: Docker Compose (Docker Inc., v2.15.1)
  dev: Docker Dev Environments (Docker Inc., v0.0.5)
  extension: Manages Docker extensions (Docker Inc., v0.2.17)
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)
  scan: Docker Scan (Docker Inc., v0.23.0)

Server:
 Containers: 38
  Running: 34
  Paused: 0
  Stopped: 4
 Images: 33
 Server Version: 20.10.22
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 9ba4b250366a5ddde94bb7c9d1def331423aa323
 runc version: v1.1.4-0-g5fd4c4d
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
  cgroupns
 Kernel Version: 5.15.49-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: aarch64
 CPUs: 4
 Total Memory: 7.668GiB
 Name: docker-desktop
 ID: EGCA:3ZEX:YMYL:IUTN:FGUA:FOIQ:JIVQ:4B27:TMYK:3YDO:DSH2:WCN5
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 No Proxy: hubproxy.docker.internal
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5000
  127.0.0.0/8
 Live Restore Enabled: false

解决方案

这个错误是因为Mac上Docker Desktop的Docker socket路径和Linux不同,Ansible默认查找的是/var/run/docker.sock,但Mac上Docker Desktop的socket实际路径是/Users/<你的用户名>/.docker/run/docker.sock,可通过以下三种方式解决:

方法1:在Ansible任务中指定Docker主机地址

修改docker_login和docker_image任务,添加docker_host参数指向Mac上的Docker socket:

- name: login
  docker_login:
    registry: "registryhidden"
    username: "user"
    password: "password"
    docker_host: unix:///Users/<你的用户名>/.docker/run/docker.sock

- name: Pull image
  docker_image:
    name: registryhidden/hellow-world:2.2.0
    source: pull
    docker_host: unix:///Users/<你的用户名>/.docker/run/docker.sock

注意替换<你的用户名>为实际的Mac用户名。

方法2:设置环境变量

在运行Ansible playbook前,设置DOCKER_HOST环境变量:

export DOCKER_HOST=unix:///Users/<你的用户名>/.docker/run/docker.sock

然后再执行ansible-playbook命令。

方法3:创建软链接

将Mac上的Docker socket链接到Linux默认路径:

sudo ln -s /Users/<你的用户名>/.docker/run/docker.sock /var/run/docker.sock

这样Ansible就能找到默认的socket路径,无需修改任务配置。

另外,需确认pip模块安装在Ansible使用的Python环境中。可通过ansible --version查看Ansible使用的Python路径,然后用对应pip安装模块:

/path/to/ansible/python -m pip install docker requests

内容的提问来源于stack exchange,提问作者dasharath Mangali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:08:01