Docker + Ansible + google-compute-engine debian 软件包 - 一个令人困惑的故事

Docker + Ansible + google-compute-engine debian 软件包 - 一个令人困惑的故事

亲爱的服务器故障者们!

我偶然发现了一个让我非常困惑的问题,而你是唯一能帮我的人!长话短说: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 问题以了解更多详细信息。

相关内容