Docker 中常见问题及解决

本篇博客记录了在使用 docker 的过程中常见的问题及解决方法。

1、配置的镜像加速地址不生效,可能是因为同时配置了代理的缘故,取消代理的配置,重启 docker。

2、使用 docker save 保存镜像,在另外的机器上重新加载该镜像,但是当 docker pull 该镜像时,还是会从 docker store 上拉取,并没有直接使用本地的,很可能是因为 docker save 和 docker load 时使用的 docker 的版本不一致,使用相同版本的 docker 试试。

3、在使用 VMware workstation 创建的虚拟机中,拉取 docker 镜像时,报错如下:

在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理。通常会将网络代理直接配置在 /etc/environment、/etc/profile 之类的配置文件中,这对于大部分操作都是可行的。然而,docker 命令却使用不了这些代理。比如 docker pull 时需要从外网下载镜像,就会出现上述错误。

所以,需要我们配置 docker 的网络代理

1)为 docker 服务创建一个内嵌的 systemd 目录

1
mkdir -p /etc/systemd/system/docker.service.d

2)创建 /etc/systemd/system/docker.service.d/http-proxy.conf 文件,并添加 HTTP_PROXY 环境变量

1
2
[Service]
Environment="HTTP_PROXY=http://10.3.15.206:8888/" "HTTPS_PROXY=http://10.3.15.206:8888/"

10.3.15.206 为代理的 IP 地址,8888 为代理的端口。可以使用 http 代理 https

3)如果还有内部的不需要使用代理来访问的 Docker registries,那么还需要指定 NO_PROXY 环境变量

1
2
[Service]
Environment="HTTP_PROXY=http://[proxy-addr]:[proxy-port]/" "HTTPS_PROXY=http://[proxy-addr]:[proxy-port]/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

4)更新配置并重启docker服务

1
2
systemctl daemon-reload
systemctl restart docker

或者直接在 /usr/lib/system/system/docker.service 中添加环境变量,重启加载配置,启动 docker 服务。

1)在 docker.service 中添加如下环境变量

1
2
Environment=HTTP_PROXY=http://10.3.15.206:8888/
Environment=HTTPS_PROXY=http://10.3.15.206:8888/

2)重新加载配置并重启 docker 服务

1
2
systemctl daemon-reload
systemctl restart docker

4、推送镜像到私有仓库时报错如下:

1
2
3
[root@localhost ~]# docker push 192.168.91.128:5000/busybox:latest
The push refers to a repository [192.168.91.128:5000/busybox]
Get https://192.168.91.128:5000/v1/_ping: http: server gave HTTP response to HTTPS client

原因:由提示可知,Docker 客户端使用 HTTPS 协议访问 Docker Registry,Docker Registry 采用 HTTP 协议响应导致的。

解决:在 /etc/docker/daemon.json 文件中添加如下内容:

1
2
3
4
5
{ 
    # 192.168.91.128为镜像仓库所在主机的IP地址
    # 5000为镜像仓库的访问端口号
    "insecure-registries":["192.168.91.128:5000"] 
}

然后重新启动 Docker 进程,即可拉取镜像。

5、有些非常大的docker镜像文件,在执行加载命令时,提示“no space left on device ”,如下图所示: image 但实际上,docker的工作目录存储空间足够,因此可能是docker限制了最大可加载镜像的大小,在启动 docker 的命令中添加如下参数:

1
--storage-opt dm.basesize=60G --storage-opt dm.loopmetadatasize=10G

重启 docker 进程,即可加载大型镜像。

6、从镜像仓库拉取镜像时,报错如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@iuap-vm-23 compose_manage]# docker pull 172.20.26.113:5000/yonyoucloud-middleware/mysql:5.6.37
5.6.37: Pulling from yonyoucloud-middleware/mysql
4b3659249717: Pulling fs layer 
c8583c11f183: Pulling fs layer 
7e7cf3a87134: Pulling fs layer 
00b4cfdf2950: Pulling fs layer 
df7f67bbf575: Pulling fs layer 
b63454f1c8a6: Pulling fs layer 
2af4970f1cf4: Waiting 
07f81aa4b24b: Waiting 
ec3e1cfce710: Waiting 
3cfb59dd6cbd: Waiting 
912915d933d3: Pulling fs layer 
open /data/developercenter_enterprise/data_center/docker/data/tmp/GetImageBlob519470722: no such file or directory

重启 docker

7、执行 docker ps 命令无果,重新启动 docker 时,报错如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[root@k8s-node containers]# systemctl status docker -l
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: activating (start) since Thu 2018-06-28 11:28:45 CST; 59s ago
     Docs: https://docs.docker.com
 Main PID: 15819 (dockerd)
   Memory: 109.3M
   CGroup: /system.slice/docker.service
           ├─ 3109 docker-containerd-shim deaf8701233f2b6168510faddcf25144bf7dcba3351c111c5c70cb0bfa7e681a /var/run/docker/libcontainerd/deaf8701233f2b6168510faddcf25144bf7dcba3351c111c5c70cb0bfa7e681a docker-runc
           ├─15819 /usr/bin/dockerd --storage-driver=devicemapper --insecure-registry 0.0.0.0/0 --graph=/data/docker
           ├─15826 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
           └─17205 docker-containerd-shim ac94b262a5df2f482378b79eb9ce130b29f9dc8c4908d56f4633d8f44d776660 /var/run/docker/libcontainerd/ac94b262a5df2f482378b79eb9ce130b29f9dc8c4908d56f4633d8f44d776660 docker-runc

Jun 28 11:28:45 k8s-node systemd[1]: Starting Docker Application Container Engine...
Jun 28 11:28:45 k8s-node dockerd[15819]: time="2018-06-28T11:28:45+08:00" level=warning msg="the \"-g / --graph\" flag is deprecated. Please use \"--data-root\" instead"
Jun 28 11:28:45 k8s-node dockerd[15819]: time="2018-06-28T11:28:45.616437324+08:00" level=info msg="libcontainerd: new containerd process, pid: 15826"
Jun 28 11:28:46 k8s-node dockerd[15819]: time="2018-06-28T11:28:46.622111922+08:00" level=warning msg="failed to rename /data/docker/tmp for background deletion: %!s(<nil>). Deleting synchronously"
Jun 28 11:28:46 k8s-node dockerd[15819]: time="2018-06-28T11:28:46.644187197+08:00" level=warning msg="devmapper: Usage of loopback devices is strongly discouraged for production use. Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer to dm.thinpooldev section."
Jun 28 11:28:46 k8s-node dockerd[15819]: time="2018-06-28T11:28:46.688238156+08:00" level=warning msg="devmapper: Base device already exists and has filesystem xfs on it. User specified filesystem  will be ignored."

首先,查看磁盘是否还有空间,

8、构建 docker 镜像时,报错如下:

1
2
Step 6/7 : ADD src/template /etc/template/
ADD failed: stat /var/lib/docker/tmp/docker-builder488455212/src/template: no such file or directory

而实际上,该路径是正确的,可能是将该目录的上级目录放到了 .gitignore 文件中,将该目录放到 .gitignore 文件中包含的目录之外即可。

updatedupdated2017-10-222017-10-22
加载评论