Docker常见错误及解决方法

标签: Docker 分类: 软件 创建时间:2020-03-14 01:45:00 更新时间:2024-11-15 10:49:43

1.Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout

主要是因为镜像问题,重新修改国内镜像就好了。

2.Failed to connect to bus: Host is down

我在docker的虚拟机CentOS中安装了initscripts,修改了/etc/sysconfig/network-scripts/ifcfg-eth3文件,准备执行:service network restart 重启网络,结果报错了。

3. Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

这里主要是因为给Docker绑定端口的时候,出现了端口占用问题。在windows系统下可以打开命令行输入:netstat -ano , 查询端口占用情况。

1
2
3
4
5
6
7
8
9
10
11
#查找所有运行的端口
netstat -ano

# 查看被占用端口对应的 PID
netstat -aon|findstr "8081"

# 查看指定 PID 的进程
tasklist|findstr "9088"

# 结束进程
taskkill /T /F /PID 9088

4.ERROR: Error response from daemon: open \.\pipe\docker_engine_linux: The system cannot find the file specified.errors pretty printing info

在windows10上调用:docker info 的时候,出现了这个错误。

应该是docker没有启动。可以打开Docker Desktop,然后等一会,试试能不能行。

5.WARNING: bridge-nf-call-iptables is disabled

在CentOS上安装Docker,安装没什么问题,结果调用docker info时出现了警告:WARNING: bridge-nf-call-iptables is disabled .本着不完美就不行的感觉,还是想办法解决这个问题吧。

解决方法,关闭SELinux就可以了,然后重启电脑。

1
2
3
4
## 查看selinux状态
sestatus
## 编辑/etc/selinux/config,注释SELINUX=enforcing 添加SELINUX=disabled
SELINUX=disabled

6.Job for docker.service failed because start of the service was attempted too often

CentOS 7.0 安装了docker,编写了/etc/docker/daemon.json文件,然后重启docker,出现了错误。解决方法:

1
mv /etc/docker/daemon.json /etc/docker/daemon.conf

这里有一点要说明的是,同样是CentOS系统,CentOS8就应该写daemon.json而不是daemon.conf,否则会报错

7.WARNING: No swap limit support

在Deepin系统中,执行 docker info 命令,出现了:WARNING: No swap limit support 警告。

1
2
3
4
5
6
7
8
9
10
11
## 编辑grub文件
sudo vim /etc/default/grub

## 添加如下内容,原先是空的
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

## 更新grub
sudo update-grub

## 重启系统
reboot

8.WSL 2 installation is incomplete

2020年10月12日,今天刚开电脑,就提示说Docker需要升级,升级就升级吧。升级的过程其实非常的简单,就是点击Update,下一步下一步,最后也升级成功了。

但是实际上,重启电脑之后,总是会弹出:WSL 2 installation is incomplete的警告。

我按照提示打开了网站更新 WSL 2 Linux 内核,按照上面的操作,下载然后执行下面的安装步骤。安装完成之后,再就没有然后了。

  • 运行上一步中下载的更新包。
  • 系统将提示你提供提升的权限,选择“是”以批准此安装。
  • 安装完成后,便可以开始使用 WSL2 了!
参考文章:
1.WSL2来了!但是能正常使用并不简单 (这是如何安装WSL2,我好像也没用到)

9.Mac中无法ping通容器

在Mac上安装了Docker,使用: docker run 启动了容器,但是在Mac宿主机进行ping操作的时候,却发现ping不同容器。但是在windows上进行docker容器的创建,却可以实现宿主机windows能ping通docker的centos容器。

参考文章:
1.踩坑记:解决 Mac 上 Docker 无法直接 ping 通的问题 解决问题的方案,是 github 上的 docker-for-mac 项目,主要方法是使用 OpenVpn 来访问 docker。
2.Mac宿主主机无法ping通docker容器ip
3.MAC DOCKER无法ping通容器解决方案 ocker-machine创建默认linux虚拟机

10.error during connect: Get “http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.24/info”: open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.

这是我在Windows10上执行 docker info 命令的时候,爆出的错误。

【解决方法】
使用SwitchDaemon解决了该问题,我想起来了,好像有一次我切换过Docker的模式,但是不知道如何做的了。

1
2
cd "C:\Program Files\Docker\Docker"
./DockerCli.exe -SwitchDaemon

11.no matching manifest for windows/amd64 10.0.19042 in the manifest list entries

在执行 docker pull 最新的centos镜像的时候,爆出了这个错误,无法拉取镜像:

【解决方法】

Right click Docker icon in the Windows System Tray
Go to Settings
Daemon
Advanced
Set the "experimental": true
Restart Docker

12.WARNING: The requested image’s platform (linux/amd64) does not match the detected host platform (windows/amd64) and no specific platform was requested

这是一个警告,不影响docker运行,我就暂时没有管他。

13.无法ping通www.baidu.com

如果能ping通 8.8.8.8,却不能ping通 www.baidu.com, 多半是虚拟机的dns配置不对,

【解决方法】

1
2
3
4
5
6
## 编辑DNS配置
vi /etc/resolv.conf

## 添加
nameserver 223.5.5.5 # 阿里云的域名服务器
nameserver 8.8.8.8 #google域名服务器

14.Error response from daemon: filesystem operations against a running Hyper-V container are not supported

在windows 10上,使用 docker cp 命令,将文件拷贝到容器中,出现了这个错误:

【解决方法】

1
2
3
4
5
6
7
8
## 退出容器
Ctrl+P+Q
## 停止容器
docker stop <容器id/名称>
## 执行cp命令
docker cp .\openjdk-13_linux-x64_bin.tar.gz springboot:/cloud
## 启动容器
docker start <容器id/名称>

15.System has not been booted with systemd as init system (PID 1). Can’t operate.Failed to connect to bus: Host is down

在docker pull centos:latest镜像之后,使用 yum install redis 安装完redis,运行:systemctl start redis 启动redis,直接报错了,看样子是无法执行特权命令

【解决方法】

1
2
3
4
5
6
7
8
9
## 启动一个容器时添加--privileged参数
docker run -itd --privileged --name myCentos centos /usr/sbin/init

## 参考文章5中的方法
docker run -d -i -t --privileged \
--cap-add SYS_ADMIN \
-e container=docker \
-v /sys/fs/cgroup:/sys/fs/cgroup \
centos:latest /usr/sbin/init
参考文章:
1.docker 容器使用 systemctl 命令是报错 这里说是docker的bug,需要使用 docker run -itd –privileged,添加privileged这个参数才能运行
2.Docker systemctl 不能使用 System has not been booted with systemd as init system (PID 1). Can‘t operate. 这个也是使用privileged启动一个容器。
3.docker中执行systemctl命令问题记录和解决 解决方法也是添加 –privileged 参数。这篇文章其实是安装了sshd,并启动的问题解决方法,比如:No such file or directory 问题
4.docker在centos7中运行systemctl命令 如果想在容器启动时,启动systemctl,那么有两种方法:方法一,在dockerfile中加入:CMD ["/usr/sbin/init"];方法二,在启动容器的时候,运行/usr/sbin/init,即在docker run 命令最后,加上/usr/sbin/init
5.docker中centos容器执行systemctl命令异常 这的命令比较复杂,除了privileged参数之外,还有其他的一些东西
6.CentOS7 1611 运行Docker 使用systemctl start httpd.service报错的解决过程 添加–privileged参数后,还是不行,将CMD或者entrypoint设置为/usr/sbin/init,容器卡死,最后增加了-d参数。

16.Windows does not support privileged mode

在windows上执行添加privileged参数,会报错:Windows does not support privileged mode。

这个问题让我很是头疼,不知道该如何是好,明明运行systemctl需要privileged参数,但是windows上似乎又偏偏不支持,难道就无法使用了吗?

【解决方法】
右键右下角的Docker图标,将容器模式由Windows改为Linux模式:Switch to Linux containers。这样再创建容器的时候,就不会出现这个 not support 的问题了。

这个时候要注意,经过转换之后,你原先在windows模式下创建的镜像就不见了,需要重新拉取。当切换回Windows模式之后,镜像又回来了。

参考文章:
1.Windows does not support privileged mode
2.Error response from daemon: Windows does not support privileged mode
3.windows docker 安装centOS系统
4.WSL2 的 Linux 中运行 systemctl 命令
5.Windows10中用Docker优雅的拥有一个自己的Linux环境 我估计作者也没有试验过吧,写着Windows10使用Docker,也用了privileged参数,但是实际上,下面的第一条评论,就是不支持privileged模式
6.create kic node: create container: Windows does not support privileged mode 这里有人说:Right click on the Docker Desktop icon and toggle switch to Linux containers two times,也就是把容器改为linux容器。

17.mac升级docker之后,镜像消失了

升级之后,我以前的镜像什么的,都没有了,我查找了文件,发现了有两个地方保存着Docker.raw文件,但是没有一些文章中说的:/Users/kyle/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw 文件。因为我已经很久没有动 mac 上的docker了,难道我真的记错了吗?我升级之前,让我点点那几个按钮是什么意思呢?是不是包含了什么重要的信息?

1
2
3
4
5
## 查找raw
sudo find / -name Docker.raw
## 以下两个文件
/System/Volumes/Data/Users/bibichuan/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
/Users/bibichuan/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
参考文章:
1.mac docker升级后镜像丢失修复 执行命令:
1
cp ~/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

2.Macbook 升级 docker 后镜像文件丢失
3.Docker 教程——理解 Docker 镜像和容器的存储路径

文章目录
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。