亲爱的服务器故障者们!
我偶然发现了一个让我非常困惑的问题,而你是唯一能帮我的人!长话短说:1. 我有一套用于配置服务器的 ansible 剧本 2. 这些剧本针对 Google Cloud 和 DigitalOcean 进行了测试和验证 3. 本周,在服务器上启动 docker 容器的剧本开始在最新的 Google Compute 实例(eu-west4-a)上失败,而且只有在那里 - 旧的计算实例以及其他 ISP 中的实例都按预期运行
Ansible 失败并出现以下错误:
fatal: [example_hostname]: FAILED! => {"changed": false,
"msg": "Error starting container b57a81e7e1a39da89f91c6d6439b51cf4078f87f5a6997a7dcdd7098f84a7485:
500 Server Error: Internal Server Error (\"OCI runtime create failed:
container_linux.go:348: starting container process caused \"process_linux.go:402:
container init caused \\\"invalid argument\\\"\": unknown\")"}
当通过 docker run 启动容器时(使用与 ansible playbook 中相同的参数),容器成功启动。如果只有一个镜像,情况就不一样了 - 无法通过 ansible 启动任何容器。同时,直接在服务器上通过 docker run 启动它们效果很好。
Docker 守护进程失败并出现以下错误:
time="2018-07-25T11:54:10.809711044+02:00" level=debug msg="Calling GET /_ping"
time="2018-07-25T11:54:10.810917212+02:00" level=debug msg="Calling POST /v1.38/containers/node_exporter/restart"
time="2018-07-25T11:54:10.813468661+02:00" level=debug msg="container mounted via layerStore: &{/var/lib/docker/overlay2/a11e836fe1015928ca1181298f0934a8ee70c122e4eb1e09635b2d31c11eb3b1/merged 0x55808cfe7620 0x55808cfe7620}"
time="2018-07-25T11:54:10.813897061+02:00" level=debug msg="container mounted via layerStore: &{/var/lib/docker/overlay2/a11e836fe1015928ca1181298f0934a8ee70c122e4eb1e09635b2d31c11eb3b1/merged 0x55808cfe7620 0x55808cfe7620}"
time="2018-07-25T11:54:10.820720679+02:00" level=debug msg="EnableService a31ae80856cef0bc72298b68660739e04bc710cd815ce2a746d7276065464ab0 START"
time="2018-07-25T11:54:10.821163095+02:00" level=debug msg="EnableService a31ae80856cef0bc72298b68660739e04bc710cd815ce2a746d7276065464ab0 DONE"
time="2018-07-25T11:54:10.826647553+02:00" level=debug msg="bundle dir created" bundle=/var/run/docker/containerd/a31ae80856cef0bc72298b68660739e04bc710cd815ce2a746d7276065464ab0 module=libcontainerd namespace=moby root=/var/lib/docker/overlay2/a11e836fe1015928ca1181298f0934a8ee70c122e4eb1e09635b2d31c11eb3b1/merged
time="2018-07-25T11:54:10+02:00" level=debug msg="event published" ns=moby topic="/containers/create" type=containerd.events.ContainerCreate
time="2018-07-25T11:54:10+02:00" level=info msg="shim docker-containerd-shim started" address="/containerd-shim/moby/a31ae80856cef0bc72298b68660739e04bc710cd815ce2a746d7276065464ab0/shim.sock" debug=true pid=7576
time="2018-07-25T11:54:10+02:00" level=debug msg="registering ttrpc server"
time="2018-07-25T11:54:10+02:00" level=debug msg="serving api on unix socket" socket="[inherited from parent]"
time="2018-07-25T11:54:10+02:00" level=info msg="shim reaped" id=a31ae80856cef0bc72298b68660739e04bc710cd815ce2a746d7276065464ab0
time="2018-07-25T11:54:10.870453438+02:00" level=error msg="stream copy error: reading from a closed fifo"
time="2018-07-25T11:54:10.870900093+02:00" level=error msg="stream copy error: reading from a closed fifo"
time="2018-07-25T11:54:10+02:00" level=debug msg="event published" ns=moby topic="/containers/delete" type=containerd.events.ContainerDelete
time="2018-07-25T11:54:10.883501549+02:00" level=error msg="a31ae80856cef0bc72298b68660739e04bc710cd815ce2a746d7276065464ab0 cleanup: failed to delete container from containerd: no such container"
time="2018-07-25T11:54:10.885529863+02:00" level=debug msg="FIXME: Got an API for which error does not match any expected type!!!: Cannot restart container node_exporter: OCI runtime create failed: container_linux.go:348: starting container process caused \"process_linux.go:402: container init caused \\\"invalid argument\\\"\": unknown" error_type="*errors.errorString" module=api
time="2018-07-25T11:54:10.885962960+02:00" level=error msg="Handler for POST /v1.38/containers/node_exporter/restart returned error: Cannot restart container node_exporter: OCI runtime create failed: container_linux.go:348: starting container process caused \"process_linux.go:402: container init caused \\\"invalid argument\\\"\": unknown"
time="2018-07-25T11:54:10.886356247+02:00" level=debug msg="FIXME: Got an API for which error does not match any expected type!!!: Cannot restart container node_exporter: OCI runtime create failed: container_linux.go:348: starting container process caused \"process_linux.go:402: container init caused \\\"invalid argument\\\"\": unknown" error_type="*errors.errorString" module=api
通过 docker run 运行时,这些都不是。最初认为是与 ansible 或 python 有关的问题,但安装了完全相同版本的同一组软件包和库让我感到很期待。所以最终,让我能够再次通过 ansible 启动 docker 容器的是发出...
apt purge -y google-compute-engine google-compute-engine-oslogin
一旦这些软件包消失并且实例重新启动,一切都会完美运行!!! 使用 GCE 的其他服务器进行验证,这些软件包的当前版本是:
ii google-compute-engine 2.8.3-1 all Google Compute Engine guest environment.
ii google-compute-engine-oslogin 1.3.0-1+deb9 amd64 Google Compute Engine OS Login
从其他一切按预期运行的情况来看:
ii google-compute-engine 2.7.6-1 all Google Compute Engine guest environment.
ii google-compute-engine-oslogin 1.1.5-1+deb9 amd64 Google Compute Engine OS Login
我无法降级这些软件包,因为它们显然不再存在于 repo 中。
现在关于 OSLogin - 我没有使用此功能,并且通过实例元数据 (enable-oslogin = FALSE) 明确阻止它不会改变任何东西。 唯一可靠的“修复”此问题的方法就是删除软件包 - 但由于它是“突然”中断,因此感觉这不是正确的方法。
以及删除这些软件包(并重新启动 - SSHd 重启可能就足够了)。执行
/usr/bin/google_oslogin_control deactivate
也无法修复任何问题(即使重新启动整个虚拟机后也是如此)。我不知道该检查什么,该看什么——我觉得删除软件包并不是真正的解决办法,因为它们存在于其他虚拟机上,而且这似乎是最近的行为变化某处我无法确定具体位置。
欢迎并感谢任何形式的回复!
答案1
根据 Google 的问题追踪器:https://issuetracker.google.com/issues/111907041
导致此问题的原因是主机名过长(我的情况是 50 个字符) - 缩短主机名解决了问题并允许容器启动。我邀请所有感兴趣的人查看 Google 问题以了解更多详细信息。