Ssh

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

  • August 24, 2018

親愛的伺服器故障者!

我偶然發現了一個讓我很困惑的問題,而你是我唯一的幫助!長話短說: 1. 我有一套 ansible playbook 來配置伺服器 2. 這些 playbook 已針對 Google Cloud 和 DigitalOcean 進行測試和驗證 3. 本週,在最新的 Google Compute 實例(歐盟)上啟動伺服器上的 docker 容器的 playbook 開始失敗-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

也不能修復任何東西(即使在整個 VM 重新啟動後)。我已經不知道要檢查什麼和要看什麼了 - 我覺得刪除軟體包並不是真正的方法,因為它們存在​​於其他虛擬機上,而且它似乎是最近在某處我無法改變的行為查明在哪裡。

歡迎和讚賞任何形式的回复!

根據Google的問題跟踪器:https ://issuetracker.google.com/issues/111907041

這個問題的原因是主機名長(在我的例子中是 50 個字元) - 減少它已經解決了問題並允許容器啟動。我邀請所有有興趣的人查看 Google 問題以獲取更多詳細資訊。

引用自:https://serverfault.com/questions/923820