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。
自定义 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,