dgtlcrur

はてなのリソースをちょっとだけ消費するチラシの裏

(仮復旧?)うちのインスタンスがしばらくすると502エラーになる件

 

surdon.hateblo.jp

前回のエントリの続きです。

結果的にdocker-ce を17.09に戻したら安定稼働するようになりました…

 

前回のエントリーの後も何度かdockerがクラッシュしてシステムごと再起動したりしてました。

クラッシュする時の挙動は「fatal error: concurrent map writes→コンテナ自動kill&restart→実はrestartできていない→コンテナ間socket通信失敗→fatal error: concurrent map writes→以下エンドレス」みたいな感じ。

dockerd自体がクラッシュするのがとても気になっていたので、docker-ceの変更履歴を読んでみました。

github.com

IMPORTANT: Docker CE 17.11 is the first Docker release based on containerd 1.0 beta. Docker CE 17.11 and later won't recognize containers started with previous Docker versions. If using Live Restore, you must stop all containers before upgrading to Docker CE 17.11. If you don't, any containers started by Docker versions that predate 17.11 won't be recognized by Docker after the upgrade and will keep running, un-managed, on the system.

[google翻訳]

重要:Docker CE 17.11は、containerd 1.0 betaを採用した初めてのDockerリリースです。 Docker CE 17.11以降では、以前のDockerバージョンで起動したコンテナは認識されません。ライブリストアを使用する場合は、Docker CE 17.11にアップグレードする前にすべてのコンテナを停止する必要があります。そうしないと、17.11より前のバージョンのDockerで起動されたコンテナは、アップグレード後にDockerによって認識されず、システム上で管理されずに実行され続けます。

ひょっとして:docker-ce 17.11環境でコンテナ再構築しないといけない

www.publickey1.jp17.11からdocker-ceの仕様変わってんじゃん。

 

google先生に教えてもらった別のコンテナに関するQAで「docker-ce 17.11でクラッシュするが17.09にダウングレードしたら再現しなくなった」ぽい書き込みがあったので、docker-ceを試しに17.09にダウングレードしてみる。

※書き込みのソースどこだったか忘れました。思い出したら後日リンク貼ります…

# yum remove docker-ce.x86_64

# yum --showduplicate list docker-ce.x86_64

  • docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable
    docker-ce.x86_64 17.10.0.ce-1.el7.centos docker-ce-edge
    docker-ce.x86_64 17.11.0.ce-1.el7.centos docker-ce-edge
  • →docker-ce-stableな17.09.1を入れ直すことにする

# vi /etc/yum.repos.d/docker-ce.repo

  • docker-ce-edgeのenablerepo=0に変更

# yum install docker-ce.x86_64

Installing:
docker-ce x86_64 17.09.1.ce-1.el7.centos docker-ce-stable 21 M

  • →17.09.1が選択された

# systemctl start docker

# docker version

Client:
Version: 17.09.1-ce
API version: 1.32
Go version: go1.8.3
Git commit: 19e2cf6
Built: Thu Dec 7 22:23:40 2017
OS/Arch: linux/amd64

Server:
Version: 17.09.1-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: 19e2cf6
Built: Thu Dec 7 22:25:03 2017
OS/Arch: linux/amd64
Experimental: false

 

最後にdocker-composeでmastodonのコンテナ達を停止→再起動

とりあえず再起動から2日経ちましたが特に問題なく稼働しているようです。

/var/log/messagesにもdockedからほとんどエラーログを吐かなくなりました。

根本原因がここかどうかは自分でもわかってないので、モヤモヤしつつも稼働状態を注視していきたいと思います。

 

ちなみに

github.com前回エントリでリンクしたmoby/mobyでの議論に更新があり、「17.12(現時点ではRC1)で本事象は解決した」とのことです。

とりあえずstableな17.09で様子見ます。

 

教訓

docker-ce-edgeを闇雲に攻めないようにしよう。

あと、変更履歴って大事。