Ubuntu 22.04下Docker Desktop与Knative Func套接字问题及冲突求助
一、修正Docker套接字地址
报错源于func默认读取/var/run/docker.sock,但Docker Desktop在Ubuntu上的套接字路径不同,且你之前设置的路径可能有误,按以下步骤处理:
定位正确套接字路径
打开Docker Desktop,进入Settings > Resources > Advanced查看「Docker socket location」,通常路径为unix:///run/user/<你的UID>/docker.sock。也可通过命令直接确认:ls -l /run/user/$(id -u)/docker.sock若输出文件信息,即为正确路径。
设置环境变量
- 临时生效(当前终端):
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock - 永久生效(写入shell配置文件,如
~/.bashrc):echo 'export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock' >> ~/.bashrc source ~/.bashrc
- 临时生效(当前终端):
验证连接有效性
执行docker info,若能正常输出Docker环境信息,说明环境变量配置正确,此时再运行func build即可。
二、解决dockerd依赖与Docker Desktop的矛盾
你完全不需要通过sudo apt install docker.io安装dockerd——Docker Desktop本身已内置dockerd守护进程,Knative func仅需可访问的docker守护进程,直接使用Docker Desktop内置的即可:
确认Docker Desktop的dockerd处于运行状态
查看Docker Desktop右下角图标,显示「Running」即代表内置dockerd已在后台运行。避免组件冲突
不要安装docker.io包,它会与Docker Desktop的核心组件冲突,导致Docker Desktop被自动移除。若之前误装,可通过以下命令恢复:sudo apt remove docker.io docker-compose docker-compose-v2 containerd.io sudo apt install docker-desktop独立dockerd替代方案(可选)
若确实需要同时运行独立dockerd和Docker Desktop,可修改独立dockerd的套接字路径避免冲突:- 编辑
/etc/docker/daemon.json,添加配置:{ "hosts": ["unix:///var/run/docker-alt.sock", "tcp://127.0.0.1:2376"] } - 重启独立dockerd:
sudo systemctl restart docker - 运行func时指定该套接字:
DOCKER_HOST=unix:///var/run/docker-alt.sock func build
- 编辑
内容的提问来源于stack exchange,提问作者Septimus

