Docker + Ansible + google-compute-engine debian 包 - 一個令人困惑的故事
親愛的伺服器故障者!
我偶然發現了一個讓我很困惑的問題,而你是我唯一的幫助!長話短說: 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 問題以獲取更多詳細資訊。