最近做课设需要使用Deepin开发OpenHarmony 轻量系统,配置环境时出现了很多问题,遂打算采用OpenHarmony官方的Docker进行开发。这里将汇总一下遇到的问题,以备参考。
1. Failed to connect. Is Docker running?
此问题在以下场景中触发:
- 直接执行docker命令提示Failed to connect. Is Docker running
- Visual Studio Code Docker插件显示不出image与container.
- 执行docker run/pull提示。
原因:
docker使用unix socket进行通讯,但是unix socket属于root用户,但是普通用户需要使用sudo才能开启root权限,但是普通的操作并没有root权限。
解决方案:
将用户加入到docker用户组,使当前用户具备执行Docker相关指令的权限。
1. 执行以下命令,如果没有在结果中看到"docker"字样,则需要把用户加入到docker组。一般而言docker组在安装docker时就已创建好。
groups $USER
2. 执行以下命令将当前用户加入到docker组并更新用户组。
sudo usermod -aG docker ${USER}
newgrp docker
3. 重启docker服务
sudo systemctl restart docker
4. 重新打开vscode或注销用户重新登录。
参考:vscode中docker插件无法连接_ximikang的博客-CSDN博客
docker加入用户组 - woodx - 博客园 (cnblogs.com)
2.docker run报错:Error response from daemon: unable to find "cpu" in controller set: unknown.
cgroup相关问题,查阅google、官方社区都没有找到合适的解决方案。github相似的issue如下:
Error response from daemon: unable to find "cpuacct" in controller set: unknown · Issue #552 · docker/for-linux (github.com)
我的解决方案:
完全卸载docker,并卸载掉其所有配置文件:
由于我使用的是apt-get下载的,所以卸载方式是:
1. 首先停止docker服务
systemctl docker stop
2. 调用apt-get的remove卸载docker.io包
sudo apt-get remove docker.io
3.卸载docker相关配置文件:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
如果此时你发现docker指令仍然可以执行,不妨在根目录(或~目录)执行which docker,把找到的都删了。
之后重启Terminal应该就可以了。
随后使用curl下载安装docker包
首先使用apt更新/下载crul,这我就不赘述了,一般deepin都自带curl。
执行以下代码下载docker.使用阿里云镜像加速。
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
下载完毕后,按照1中的方法将当前用户加入到docker用户组,随后启动docker服务。
执行以下代码:
docker run hello-world
此代码会拉取一个hello-world示例镜像并运行,出现Hello from docker字样则表示docker安装成功。
参考:Deepin系统安装docker - 知乎 (zhihu.com)
拉取镜像时可能还会出现如下问题:
3. error pulling image configuration: download failed after attempts=6: dial tcp 104.18.125.25:443: i/o timeout
因为众所周知的原因,从docker hub中拉取镜像超时了。需要为docker配置镜像源:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
4.Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon
/etc/docker/daemon.json有问题。删掉就行了。不然就重新配一下。
cd /etc/docker
sudo vim daemon.json
加上这段代码:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
老规矩,重启docker服务,解决。
本帖持续更新,也欢迎大家遇到问题来交流。