Docker が Ubuntu 16.04 で動作しませんか?

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を見つけました。

Ubuntu 16.04 を使用しているため、こちらが解決策のようです。

  1. deb リポジトリを追加します。
sudo add-apt-repository 'deb http://security.ubuntu.com/ubuntu xenial-security main universe'
  1. runc をインストールします(@vietthang207 の元の投稿で GitHub が ~ を壊してしまったことに注意してください)。
sudo apt-get install runc=1.0.0~rc7+git20190403.029124da-0ubuntu1~16.04.4
  1. 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

再起動しましたか?アップグレード後に再起動しなかった場合、Docker で問題が発生した経験があります。

はい、それは恐ろしく聞こえますね。16.04 でサイトを運用していることは知っていますが、runc については何も操作していないことを確認しています。

ダウンタイムが気になる場合、かつ Digital Ocean を利用しているなら、以下の手順を試してみてください。

  1. 18.04 の新しいドロプレットを起動し、クリーンインストールを行います。
  2. フローティング IP を取得し、古いサーバーを指し、DNS もそこを指すように設定します。
  3. 古いフォーラムをリードオンリーモードにします。
  4. バックアップを取得します。
  5. 新しいサーバーにリストアします。
  6. フローティング IP を新しいサーバーに指し替えます。

これでダウンタイムは発生せず、バックアップとリストアに必要なリードオンリー時間のみの中断で済みます。リードオンリー移行を行う前に、何度か練習しておくことも可能です。また、バックアップにアップロードファイルを含める代わりに rsync で転送することもできます。その場合、バックアップとリストア対象はデータベースのみで済みます。

既存の Let’s Encrypt 証明書も引き継ぐことをお勧めします。そうしないと、証明書を再構築する必要があるかもしれません。

「いいね!」 2

再起動も考えましたが、Docker のインストールがどうやら壊れているようですが、フォーラムは正常に動作しているため、サーバーを再起動するとフォーラムも壊れるかもしれないと考え、見送りました。その確率はどれくらいでしょうか?再起動を試みるべきでしょうか?

ダウンタイムを最小限に抑えるためのご説明をありがとうございます。ただし、私は DigitalOcean(DO)を利用しておりません。しかし、数時間や数日にわたるものでない限り、ダウンタイムは全く問題ありません。

Docker をアップグレードされたのであれば、まだインストールされたままのはずです。この問題がアップグレード後に発生したのであれば、再起動で解決する可能性が非常に高いです。注意: 無料のアドバイスは、それに見合う価値しかありません。:wink:

再起動する前に必ずバックアップを取ってください。最悪の場合でも、バックアップと app.yml があれば、1 時間以内に新しいサーバーを立ち上げて最初からやり直すことができます(10 GB 以上のデータをお持ちでない限りですが)。

私の提案は、多くのホスティングサービスで機能するはずです。

もし非常に慎重になりたい場合は、どこかに新しいサーバーを別途用意し、そこにバックアップをコピーしておいてください。何か重大な問題が発生した場合に、代替手段として使えるようになります。

「いいね!」 1

本当に感謝しています。

実際には、それ以上の価値があると思います。しかし、あなたの言いたいことは理解できます。

正確に言うと:

  1. Discourse の Web インターフェースを通じて Docker マネージャーのアップグレードを 試みました が失敗しました(エラーはこちらに投稿しました)
  2. 次に . /launcher rebuild app を試しましたが失敗し、Troubleshoot docker installation issues に誘導されました
  3. その後、データコンテナと web_only コンテナが別々に存在しているため、おそらく別のコマンドを使用すべきだと気づき、./launcher bootstrap web_only を試しましたが、同じエラーが発生しました。
  4. Troubleshoot docker installation issues の手順に従いました。残りは OP に記載されています。

週末に時間があるときに再起動を試みるつもりです。その際、発生する可能性のある後続の問題を修正する時間を確保するためです。なぜなら、私は過去に Discourse インスタンスを 3 つ設定したことがありますが、それは何年も前のことです。「新しいサーバーをセットアップして最初からやり直す」のはおそらく 1 日中忙しくなるでしょう。ドメインを新しい IP アドレスに指し直すだけで、それ自体が潜在的な悪夢になるかもしれません。あるいはそうではないかもしれませんが、それが大したことではないと気づくだけでも時間がかかるでしょう…

「いいね!」 1

さて、私はすでに何百時間も費やしました(前任者が提供していた「職人芸的なインストール」を単に行う場合よりもはるかに長い時間です)。もし DNS の設定方法をご存知であれば、私のインストールパッケージは完全に自動化されており、1 時間未満で完了します(大半は DNS の伝播時間です)。