docker 06 故障及解决方案

  1. 运行失败 1
  2. 镜像拉取失败 1
  3. windows上镜像拉取失败
  4. permission denied
  5. 启动时报错
  6. 容器时间不对
  7. 容器进去正常,但是外部无法访问

运行失败 1

open /var/run/docker/libcontainerd/containerd

init/shim-log.json: no such file or directory

解决方案:关闭所有容器,然后重启 docker 服务

docker stop `docker ps -a -q`
systemctl stop docker.service
systemctl start docker.service

镜像拉取失败 1

docker: Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io: read tcp 172.20.30.205:50310->50.17.62.194:443: read: connection reset by peer.

修改镜像地址为

{ “registry-mirrors”: [ “https://registry.docker-cn.com", “http://aad0405c.m.daocloud.io" ], “insecure-registries”: [], “debug”: true, “experimental”: false}

windows上镜像拉取失败

failed to register layer: re-exec error: exit status 1: output: Failed to openRelative failed in Win32: open \?\C:\ProgramData\Docker\windowsfilter\2cf237766f96b954741cdc79ac6b0663b169607979041cd8336e6ec3c997daad\usr\share\terminfo\a: Cannot create a file when that file already exists. (0x1f) usr\share\terminfo\a\

解决方案

vi: command not found问题解决

这是因为vim没有安装。
使用如下命令安装:
apt-get update
apt-get install vim

permission denied

若使用了-v资源映射之后出现权限不足的问题

可以在启动命令后面追加-u root,代表以root用户运行:

docker run --name sinopia -d -u root rnbwd/sinopia

启动时报错

iptables:No chain/target/match by the name

解决方案

systemctl stop docker.service
systemctl start docker.service

docker 服务启动的时候,docker服务会向iptables注册一个链,以便让docker服务管理的containner所暴露的端口之间进行通信。(通过命令iptables -L可以查看iptables 链。)
在开发环境中,如果你删除了iptables中的docker链,或者iptables的规则被丢失了(例如重启firewalld),docker就会报iptables error例如:failed programming external connectivity … iptables: No chain/target/match by that name。
要解决这个问题,只要重启docker服务,之后,正确的iptables规则就会被创建出来

通常我们不该去关防火墙,建议采用开放端口方式

容器时间不对

该问题是宿主机和容器时去不一致导致的。
把本机时区复制到宿主机即可:

docker cp /etc/localtime mysql8:/etc/localtime

然后重启容器。

容器进去正常,但是外部无法访问

1、在宿主机上检查下端口

netstat -ano|grep 端口

查看是否是绑定了ipv6,若显示tcp6则说明就是ipv6
(其实docker默认就是tcp6,这不是docker的问题)。

此时我们现在需要确认下,宿主机是否没开启ipv4转发

vim /usr/lib/sysctl.d/00-system.conf

确实没有,那么我们追加如下代码,开始ipv4转发

net.ipv4.ip_forward=1

最后重启服务器(不要systemctl restart network,会导致连不上服务器)、docker、容器

reboot
sudo systemctl start docker.service
docker start mysql

转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:docker 06 故障及解决方案

字数:641

本文作者:夏来风

发布时间:2020-11-04, 20:52:42

原始链接:http://www.demo1024.com/blog/docker-errors/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。