tophee
(Christoph)
2020 年 1 月 16 日午後 8:23
1
Docker マネージャーを Web UI を介して更新しようとした際、Docker のインストールに問題が発生しました。Sam の推奨 に従ったところ、Docker のインストールが破損していることが確認できました。
$ docker run -it --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest
docker: Error response from daemon: no status provided on response: unknown.
ERRO[0003] error waiting for container: context canceled
その後、自分が直面している問題と一致すると思われる GitHub のIssueを見つけました。
opened 08:30AM - 10 Oct 19 UTC
closed 10:01PM - 21 Oct 19 UTC
* [x] This is a bug report
* [ ] This is a feature request
* [ ] I searched ex… isting issues before opening this one
### Expected behavior
### Actual behavior
```
docker: Error response from daemon: no status provided on response: unknown.
ERRO[0000] error waiting for container: context canceled
```
### Steps to reproduce the behavior
```
sudo docker run --rm hello-world
```
**Output of `docker version`:**
```
Client: Docker Engine - Community
Version: 19.03.3
API version: 1.40
Go version: go1.12.10
Git commit: a872fc2
Built: Tue Oct 8 00:59:54 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.3
API version: 1.40 (minimum version 1.12)
Go version: go1.12.10
Git commit: a872fc2
Built: Tue Oct 8 00:58:28 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.5
GitCommit: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
```
**Output of `docker info`:**
```
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 2
Server Version: 19.03.3
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.15.0-1046-gcp
Operating System: Ubuntu 16.04.6 LTS
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.853GiB
Name: dev-core
ID: ZVTZ:2OZX:VHFQ:OFY7:R7NR:RN32:SO2L:QHAX:5H5R:27FJ:5L2B:C5Z7
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No swap limit support
```
**Additional environment details (AWS, VirtualBox, physical, etc.)**
AWS
|Distributor ID:|Ubuntu|
|---|---|
|Description:|Ubuntu 16.04.6 LTS|
|Release:|16.04|
|Codename:|xenial|
Ubuntu 16.04 を使用しているため、こちら が解決策のようです。
deb リポジトリを追加します。
sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu xenial-security main universe'
runc をインストールします(@vietthang207 の元の投稿で GitHub が ~ を壊してしまったことに注意してください)。
sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
runc のインストールにより docker-ce が削除されるため、再インストールします。
sudo apt-get install docker-ce
この操作が安全かどうか、あるいはどのような結果が予想されるか確認していただけませんか?Docker がアンインストールされるのではないかと少し恐れています。その場合、プロセス中にサイトがダウンするということになるでしょう(奇妙なことに、Docker が破損しているにもかかわらず、現在はサイトがまだ稼働しています)。しかし、Discourse のインストールは安全でしょうか?それともコンテナも消えてしまうのでしょうか?
追記:ここまで踏み込む勇気が出た状態は以下の通りです。
$ sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
[sudo] password for christoph:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
aufs-tools cgroupfs-mount docker-ce-cli libltdl7
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
containerd.io docker-ce
The following NEW packages will be installed:
runc
0 upgraded, 1 newly installed, 2 to remove and 21 not upgraded.
1 not fully installed or removed.
Need to get 1,890 kB of archives.
After this operation, 192 MB disk space will be freed.
Do you want to continue? [Y/n] n
Abort.
$
「いいね!」 1
pfaffman
(Jay Pfaffman)
2020 年 1 月 16 日午後 11:11
2
再起動しましたか?アップグレード後に再起動しなかった場合、Docker で問題が発生した経験があります。
はい、それは恐ろしく聞こえますね。16.04 でサイトを運用していることは知っていますが、runc については何も操作していないことを確認しています。
ダウンタイムが気になる場合、かつ Digital Ocean を利用しているなら、以下の手順を試してみてください。
18.04 の新しいドロプレットを起動し、クリーンインストールを行います。
フローティング IP を取得し、古いサーバーを指し、DNS もそこを指すように設定します。
古いフォーラムをリードオンリーモードにします。
バックアップを取得します。
新しいサーバーにリストアします。
フローティング IP を新しいサーバーに指し替えます。
これでダウンタイムは発生せず、バックアップとリストアに必要なリードオンリー時間のみの中断で済みます。リードオンリー移行を行う前に、何度か練習しておくことも可能です。また、バックアップにアップロードファイルを含める代わりに rsync で転送することもできます。その場合、バックアップとリストア対象はデータベースのみで済みます。
既存の Let’s Encrypt 証明書も引き継ぐことをお勧めします。そうしないと、証明書を再構築する必要があるかもしれません。
「いいね!」 2
tophee
(Christoph)
2020 年 1 月 16 日午後 11:17
3
pfaffman:
再起動しましたか?
再起動も考えましたが、Docker のインストールがどうやら壊れているようですが、フォーラムは正常に動作しているため、サーバーを再起動するとフォーラムも壊れるかもしれないと考え、見送りました。その確率はどれくらいでしょうか?再起動を試みるべきでしょうか?
ダウンタイムを最小限に抑えるためのご説明をありがとうございます。ただし、私は DigitalOcean(DO)を利用しておりません。しかし、数時間や数日にわたるものでない限り、ダウンタイムは全く問題ありません。
pfaffman
(Jay Pfaffman)
2020 年 1 月 16 日午後 11:24
4
tophee:
再起動を試みるべきでしょうか?
Docker をアップグレードされたのであれば、まだインストールされたままのはずです。この問題がアップグレード後に発生したのであれば、再起動で解決する可能性が非常に高いです。注意: 無料のアドバイスは、それに見合う価値しかありません。
再起動する前に必ずバックアップを取ってください。最悪の場合でも、バックアップと app.yml があれば、1 時間以内に新しいサーバーを立ち上げて最初からやり直すことができます(10 GB 以上のデータをお持ちでない限りですが)。
私の提案は、多くのホスティングサービスで機能するはずです。
もし非常に慎重になりたい場合は、どこかに新しいサーバーを別途用意し、そこにバックアップをコピーしておいてください。何か重大な問題が発生した場合に、代替手段として使えるようになります。
「いいね!」 1
tophee
(Christoph)
2020 年 1 月 16 日午後 11:52
5
pfaffman:
無料のアドバイス
本当に感謝しています。
pfaffman:
その価値はあなたが支払う金額と同じです
実際には、それ以上の価値があると思います。しかし、あなたの言いたいことは理解できます。
正確に言うと:
Discourse の Web インターフェースを通じて Docker マネージャーのアップグレードを 試みました が失敗しました(エラーはこちら に投稿しました)
次に . /launcher rebuild app を試しましたが失敗し、Troubleshoot docker installation issues に誘導されました
その後、データコンテナと web_only コンテナが別々に存在しているため、おそらく別のコマンドを使用すべきだと気づき、./launcher bootstrap web_only を試しましたが、同じエラーが発生しました。
Troubleshoot docker installation issues の手順に従いました。残りは OP に記載されています。
週末に時間があるときに再起動を試みるつもりです。その際、発生する可能性のある後続の問題を修正する時間を確保するためです。なぜなら、私は過去に Discourse インスタンスを 3 つ設定したことがありますが、それは何年も前のことです。「新しいサーバーをセットアップして最初からやり直す」のはおそらく 1 日中忙しくなるでしょう。ドメインを新しい IP アドレスに指し直すだけで、それ自体が潜在的な悪夢になるかもしれません。あるいはそうではないかもしれませんが、それが大したことではないと気づくだけでも時間がかかるでしょう…
「いいね!」 1
pfaffman
(Jay Pfaffman)
2020 年 1 月 17 日午前 12:07
6
さて、私はすでに何百時間も費やしました(前任者が提供していた「職人芸的なインストール」を単に行う場合よりもはるかに長い時間です)。もし DNS の設定方法をご存知であれば、私のインストールパッケージ は完全に自動化されており、1 時間未満で完了します(大半は DNS の伝播時間です)。