1、在拉取镜像时候报错:
Get https://registry-1.docker.io/v2/: x509: certificate is valid for jenkins.bison.services, *.bison.services, not registry-1.docker.io
解决办法:
配置文件/etc/docker/daemon.json中添加注册表镜像"registry-mirrors"地址 “https://docker.mirrors.ustc.edu.cn”
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"https://hub-mirror.c.163.com",
"https://192.168.221.11"
]
}
然后重新加载配置文件,重新启动docker
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
注:
添加时犯了一个错误,没有在地址句末添加逗号,导致重启docker失败,报错如下,重新检查 /etc/docker/daemon.json 文件后改正了错误
zhx@zhx-HP-ProDesk-600-G3-PCI-MT:~$ systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2022-03-29 17:29:38 CST; 49s ago
Docs: https://docs.docker.com
Process: 10315 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
Main PID: 10315 (code=exited, status=1/FAILURE)
3月 29 17:29:38 zhx-HP-ProDesk-600-G3-PCI-MT systemd[1]: docker.service: Service hold-off time over, scheduling restart.
3月 29 17:29:38 zhx-HP-ProDesk-600-G3-PCI-MT systemd[1]: docker.service: Scheduled restart job, restart counter is at 3.
3月 29 17:29:38 zhx-HP-ProDesk-600-G3-PCI-MT systemd[1]: Stopped Docker Application Container Engine.
3月 29 17:29:38 zhx-HP-ProDesk-600-G3-PCI-MT systemd[1]: docker.service: Start request repeated too quickly.
3月 29 17:29:38 zhx-HP-ProDesk-600-G3-PCI-MT systemd[1]: docker.service: Failed with result 'exit-code'.
3月 29 17:29:38 zhx-HP-ProDesk-600-G3-PCI-MT systemd[1]: Failed to start Docker Application Container Engine.
3月 29 17:30:13 zhx-HP-ProDesk-600-G3-PCI-MT systemd[1]: docker.service: Start request repeated too quickly.
3月 29 17:30:13 zhx-HP-ProDesk-600-G3-PCI-MT systemd[1]: docker.service: Failed with result 'exit-code'.
3月 29 17:30:13 zhx-HP-ProDesk-600-G3-PCI-MT systemd[1]: Failed to start Docker Application Container Engine.
2、push镜像时报错:no basic auth credentials
解决办法:先登陆一下docker 仓库然后再push,例如:docker login aisrv:443
3、Docker -v | volume 挂载宿主机目录导致容器内文件被覆盖问题
当我们使用docker run -v /host/something:/container/something
尝试挂载默写目录到容器内时,期待的效果是容器内的文件和本地目录的文件相互映射,但实际效果宿主机目录会直接覆盖掉容器内的目录,但容器内文件并非被删除。容器的镜像自带的文件并没有被重写覆盖,而是被隐藏了,原理类似于linux mount
的挂载,所以与其说是覆盖,不如说是目录挂载会掩盖。
使用docker volume create
创建,这种方法创建的是数据卷
,而通过在创建容器时将主机本地任意路径挂载到容器作为数据卷的方式称为绑定数据卷
。
当我们需要将容器内文件映射,或者说是同步至宿主机的的文件夹里的时候,就可以通过数据卷的方式,具体指令如下:
docker run -it --name somename -v volume-name:/container-src anyimage /bin/bash
#数据卷的两种方式
具名挂载: 指的是volume-name,主要不要添加`/`路径符,添加路径符则表示使用的是上文中绑定数据卷的方式,使用绑定数据卷是,宿主机路径必须是绝对路径.
匿名挂载: 指的是-v 后面只有/container-src,这样容器目标路径会挂载在随机名的volume上.
# 可以查看具体的volumen列表
docker volume ls
4、docker的overlay2中存的都是什么and如何清理/var/lib/docker/overlay2
在/var/lib/docker/overlay2目录下的文件都是docker使用的存储【废话】
overlay2是分层存储,每一层通过本层的md5作为文件夹名来命名,如果要存储的两个东西【比如两个镜像】的底层几层的内容是一样的,那他们的md5就也是一样的,通过md5核验,确认他们这几层是一样的之后,在overlay2中实际存储的时候,这几层就可以只存储一份,然后由这两个东西共用,来达到节省空间的目的。
所以我们在/var/lib/docker/overlay2目录下看到的这茫茫多的md5,就是一层一层的数据。/var/lib/docker/overlay2目录会存储我们起的容器中的文件【应该还包括我们的镜像本身,docker镜像也是分层存储在这里的,毕竟容器跑起来以后系统相关的一些文件是和镜像一样的】
如果要清理那就删除不用的镜像就可以
5、拉取镜像报错:
Error response from daemon: Get "https://aisrv/v2/": dial tcp 192.168.221.11:443: connect: connection refused
报错原因:f服务端查443端口sudo netstat -nltpe | grep 443发现docker仓库服务未开启
解决办法,在服务器端开启docker仓库服务:
docker-compose up -d
6、拉取镜像报错:
certificate has expired or is not yet valid:current time** after **
表面上看好像是证书过期了。
证书文件ca.crt放在/etc/docker/certs.d/aisrv:443目录中
查看证书有效期命令:
//openssl x509 -in 证书路径/证书名称 -noout -dates
zhx@zhx-HP-ProDesk-600-G3-PCI-MT:/etc/docker/certs.d/aisrv:443$ openssl x509 -in ca.crt -noout -dates
notBefore=Aug 15 03:35:18 2019 GMT
notAfter=Aug 12 03:35:18 2029 GMT
发现证书并没有过期,
解决办法,在/etc/docker/daemon.json文件中添加仓库地址
{
"insecure-registries":["192.168.221.11:443", "aisrv:443"]
}
再拉取镜像成功。
7、创建docker镜像报错:
W: GPG error: https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64 InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A4B469963BF863CC
E: The repository 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 InRelease' is not signed.
报错原因:参考https://forums.developer.nvidia.com/t/notice-cuda-linux-repository-key-rotation/212772
CUDA Linux 存储库密钥轮换,NVIDIA 将从 2022 年 4 月 27 日开始更新和轮换 apt、dnf/yum 和 zypper 软件包管理器使用的签名密钥。未能更新存储库签名密钥将导致尝试从 CUDA 存储库访问或安装包时出现包管理错误。
为确保继续访问最新的 NVIDIA 软件,解决方法如下:
在Dockerfile中更新签名密钥:
FROM nvidia/cuda:11.4.2-cudnn8-devel-ubuntu20.04
RUN rm /etc/apt/sources.list.d/cuda*.list \
&& apt-get update \
#删除过时的签名密钥
&& apt-key del 7fa2af80 \
&& apt-get install -y wget \
#安装新的 cuda-keyring 包
&& wget https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb \
&& dpkg -i cuda-keyring_1.0-1_all.deb \
#手动安装新的签名密钥
&& apt-key adv --fetch-keys https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \