Docker Trouble Shooting

Docker 疑难杂症

Ubuntu 上的 docker 服务默认把日志输出到 /var/log/syslog 中,发生错误的时候可以检查日志内容修复。

Kubernetes 卡在 starting 状态

启动 Kubernetes 服务需要访问谷歌容器镜像仓库 k8s.gcr.io;国内激活该服务器后,Kubernets 会一直卡在 starting 状态:

解决方案

停止 docker,编辑 ~/Library/Group\ Containers/group.com.docker/settings.json 文件,设置可用代理:

{
  "overrideProxyHttps" : "http:\/\/PROXY_HOSTNAME:PORT",
  "overrideProxyHttp" : "http:\/\/PROXY_HOSTNAME:PORT",
  "overrideProxyExclude" : "mirror.aliyuncs.com,*.mirror.aliyuncs.com,*.163.com,*.aliyuncs.com",
}

或者通过图形界面重置 Docker 为出厂设置,重启 Docker 服务;设置可用代理,等待 Docker 获取相关镜像后 Kubernetes 自动转为运行状态。设置代理时,注意绕过国内镜像加速器 localhost,mirror.aliyuncs.com,*.mirror.aliyuncs.com,*.163.com,*.aliyuncs.com。

Paging
Next
Prev

自定义 hosts 后无法启动 

在 /etc/docker/daemon.json 中配置了 hosts,就无法启动 docker,/var/log/syslog 中出现 unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts 之类的错误。

原因

Ubuntu 16.04 上安装 Docker CE,会在服务启动脚本中默认添加 -H 开关项,这和 daemon.json 中的 hosts 配置冲突,导致此类错误。

解决方案

# 打开服务启动脚本
sudo vim /lib/systemd/system/docker.service
# 找到
ExecStart=/usr/bin/dockerd -H fd://
# 修改为
ExecStart=/usr/bin/dockerd

# 存盘后执行以下命令,刷新 Service 缓存
systemctl daemon-reload

Snap 版无法修改配置

Snap 安装的 dokcer 自定义后无法启动,/var/log/syslog 中出现 apparmor="DENIED" operation="open" profile="snap.docker.dockerd" name="/etc/docker/daemon.json" 之类的错误。

原因

Snap 安装的软件都有对应的 AppArmor 白名单,配置哪些目录可以读写。

解决方案

AppArmor 中声明配置文件可读后,重启 AppArmor 后即可启动 docker 服务。

vim /var/lib/snapd/apparmor/profiles/snap.docker.dockerd
# 找到添加 #include <abstractions/openssl>,在下面添加:
/etc/docker/** r,
Author: njun
njun's picture
Updated: 2020/06/18