Docker常见错误及解决方法

标签: Docker 分类: 软件 创建时间:2020-03-14 01:45:00 更新时间:2025-09-26 04:44:38

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

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

参考文章:
1.docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled

2.Failed to connect to bus: Host is down

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

参考文章:
1.systemctl failed to connect to bus - docker ubuntu:16.04 container
2.how to solve Docker issue Failed to connect to bus: No such file or directory
3.systemctl not working in container - ‘Failed to connect to bus: No such file or directory’
4.Systemctl status is not working in my Docker container

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

参考文章:
1.listen tcp 0.0.0.0:80: bind: address already in use
2.Windows下如何查看某个端口被谁占用

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,然后等一会,试试能不能行。

参考文章:
1.Error response from daemon: open \.\pipe\docker_engine_linux: The system cannot find the file specified.

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

参考文章:
1.Getting WARNING: bridge-nf-call-iptables is disabled with overlay storage driver
2.centos 7.0 查看selinux状态|关闭|开启

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,否则会报错

参考文章:
1.docker安装中遇到的大坑
2.Job for docker.service failed because start of the service was attempted too often. See “systemctl status docker.service” and “journalctl -xe” for details. To force a start use “systemctl reset-failed
3.docker在centos7启动出现错误
4.Job for docker.service failed because the control process exited with error code

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

参考文章:
1.Docker — WARNING: No swap limit support

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

参考文章:
1.After install, running docker version reports an error: error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.38/version: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the cker daemon is not running #2367 这里有解决方法。

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

参考文章:
1.Docker: “no matching manifest for windows/amd64 in the manifest list entries”

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域名服务器

参考文章:
1.Docker容器内不能联网的6种解决方案
2.centos 修改DNS,网关,IP地址

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/名称>

参考文章:
1.Error response from daemon: filesystem operations against a running Hyper-V container are not supported
2.windows docker拷贝文件报错“filesystem operations against a running Hyper-V container are not supported” 停止容器docker stop zentao;拷贝文件;重启容器

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 镜像和容器的存储路径

文章目录
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件(ititchuan@gmail.com)通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
ititchuan 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.
幸福是年华的沉淀,微笑是寂寞的悲伤。