Ubuntu18.04下Docker Python Client无法连接Docker Desktop求助
问题:Docker Python Client无法连接运行中的Docker Desktop(Ubuntu 18.04)
在Ubuntu 18.04系统上使用Docker Desktop,容器正常运行,但调用client = docker.from_env()时出现连接错误,报错核心为找不到Unix套接字文件;同时系统中不存在docker.service单元,无法通过systemctl启动。
报错信息
Traceback (most recent call last): File "/home/caohch1/anaconda3/envs/mointor/lib/python3.10/site-packages/urllib3/connectionpool.py", line 714, in urlopen httplib_response = self._make_request( File "/home/caohch1/anaconda3/envs/mointor/lib/python3.10/site-packages/urllib3/connectionpool.py", line 415, in _make_request conn.request(method, url, **httplib_request_kw) File "/home/caohch1/anaconda3/envs/mointor/lib/python3.10/http/client.py", line 1283, in request self._send_request(method, url, body, headers, encode_chunked) File "/home/caohch1/anaconda3/envs/mointor/lib/python3.10/http/client.py", line 1329, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/home/caohch1/anaconda3/envs/mointor/lib/python3.10/http/client.py", line 1278, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/home/caohch1/anaconda3/envs/mointor/lib/python3.10/http/client.py", line 1038, in _send_output self.send(msg) File "/home/caohch1/anaconda3/envs/mointor/lib/python3.10/http/client.py", line 976, in send self.connect() File "/home/caohch1/anaconda3/envs/mointor/lib/python3.10/site-packages/docker/transport/unixconn.py", line 43, in connect sock.connect(self.unix_socket) FileNotFoundError: [Errno 2] No such file or directory # 省略中间重复报错栈 docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))
尝试过的操作及结果
caohch1@caohch1-OptiPlex-7090:~/Desktop/monitor$ systemctl status docker Unit docker.service could not be found. caohch1@caohch1-OptiPlex-7090:~/Desktop/monitor$ systemctl start docker Failed to start docker.service: Unit docker.service not found. caohch1@caohch1-OptiPlex-7090:~/Desktop/monitor$ sudo snap status docker error: unknown command "status", see 'snap help'. caohch1@caohch1-OptiPlex-7090:~/Desktop/monitor$ sudo snap start docker error: snap "docker" not found
解决方案
Docker Desktop for Linux与传统Docker Engine(docker.service)的运行方式不同:它以用户级应用运行,套接字文件放在用户专属的/run/user/$UID/目录下,而非默认的/var/run/docker.sock。只需让Python Client指向正确的套接字路径即可解决问题。
1. 确认Docker Desktop的套接字路径
先查看当前用户的UID:
echo $UID
然后验证套接字文件是否存在:
ls -l /run/user/$(id -u)/docker.sock
2. 临时指定套接字路径运行脚本
在启动Python脚本前,设置DOCKER_HOST环境变量:
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock python your_script.py
3. 在Python代码中直接指定路径
修改代码,手动配置Docker客户端的连接地址:
import docker # 替换1000为你的实际UID client = docker.DockerClient(base_url='unix:///run/user/1000/docker.sock') # 若使用APIClient则用以下代码 # from docker import APIClient # client = APIClient(base_url='unix:///run/user/1000/docker.sock')
4. 永久配置环境变量(可选)
将环境变量添加到用户的bash配置文件(~/.bashrc或~/.zshrc),避免每次手动设置:
echo "export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock" >> ~/.bashrc source ~/.bashrc
内容的提问来源于stack exchange,提问作者MissSirius
相关产品推荐
相关产品推荐

