8月30日晚,系统正式推送Ubuntu24 LTS更新,寻思发布都很长时间了,主流软件兼容都差不多了就更新系统,基本都是引导式完成,系统更新结束后重启发现docker-desktop打不开了;具体表现 sudo docker ps 正常,docker ps就会报 Cannot connect to the Docker daemon at unix:///home/mao/.docker/desktop/docker.sock. Is the docker daemon running?;
讲述一下背景,家中配置了一台Ubuntu desktop的服务,家里界面外面命令行怎么方便怎么来,不要问为啥要选desktop,通过tailscale把工作电脑、家里服务器、云上服务用wireguard串成一个内网,别提多方便和安全了。
回到问题本身,我的docker在家中服务器是以非root模式运行的,一切为了安全,在我更新完系统后首先发现桌面的软件怎么都点不开,然后命令行就出现了 以root身份 sudo docker ps可以正常运行,用登录用户 docker ps 就报错Cannot connect to the Docker daemon at unix:///home/mao/.docker/desktop/docker.sock. Is the docker daemon running? 这可怎么办,我的很多监控都在当前用户容器下
刚开始怀疑是更新系统,导致非root运行配置失败了,按照官方教程重新配置
以非 root 用户身份运行 Docker 守护程序(无 root 模式)
甚至还重新安装,删除重装 apt remove (千万不要用apt purge)
配置完成还是不可运行,那怎么办;
查询官网发现是docker支持Ubuntu24,但是docker-desktop还不支持,那就破案了
哪有问题得解决,那么多容器还在里面,也看到了desktop提示修改 内核配置,尝试直接测试没看到效果(其实需要重启下服务,成功就差这一步)
那就开始寻找解决方案,也发现了很多人遇到了这类问题:
相关链接:
https://forums.docker.com/t/cannot-get-docker-desktop-to-run-on-ubuntu-24-04/141004/25
https://github.com/docker/desktop-linux/issues/209
https://ubuntu.com/blog/whats-new-in-security-for-ubuntu-24-04-lts
接下来说在解决方案:
临时可以运行
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
systemctl --user restart docker-desktop
这种需要每次重启系统后每次都执行
临时长期方便运行
在目前阶段,docker-desktop没有更新的话可以通过增加apparmor内核配置来解决,创建一个文件
/etc/sysctl.d/20-apparmor.conf
或者 /etc/sysctl.d/60-apparmor-namespace.conf
文件内容为
kernel.apparmor_restrict_unprivileged_userns = 0
想立刻看效果就执行systemctl –user restart docker-desktop
下一次重启也不影响,等后续docker-desktop修复这个问题后文件删除就可以了