Dockerが時々github.comに接続できない

./launcher rebuild app を使用して Discourse のアップグレードを試みている際に、以下の問題が発生します。

fatal: unable to access 'https://github.com/discourse/REPO.git/': Failed to connect to github.com port 443: Connection timed out

しかし、問題は、これが Discourse でさえ時々失敗することです。しかし、何も変更せずにすぐに再度試すと、成功するかもしれませんが、プラグインのいずれかで失敗します。すべてのプラグインを削除すると、Discourse の接続が失敗するか、または実際にすべてをビルドできる場合があります。

これを見ました。

しかし、コンテナのネットワークをデバッグする方法がわかりません。

「いいね!」 1

スレッドでリンクされた問題とは正確には異なり、診断が最も難しい間欠的な問題のようですが、手動でフェッチを試すことができるかもしれません。これは無害なものです。

# cd /var/discourse/
# ./launcher enter app
x86_64 arch detected.
# wget -O - -v https://github.com/discourse/logster.git/ |wc
--2023-01-04 15:30:25--  https://github.com/discourse/logster.git/
Resolving github.com (github.com)... 140.82.121.4
Connecting to github.com (github.com)|140.82.121.4|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://github.com/discourse/logster/ [following]
--2023-01-04 15:30:25--  https://github.com/discourse/logster/
Reusing existing connection to github.com:443.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘STDOUT’

-                                                  [ <=>                                                                                                 ] 231.22K  --.-KB/s    in 0.06s   

2023-01-04 15:30:26 (3.99 MB/s) - written to stdout [236767]

   2751   15860  236767
#

github.com」が適切なIPアドレスに解決され、接続され、データが返されたことがわかります。実際、コンテナ内で実行されたコマンドは、コンテナ外で実行されたコマンドと非常によく似ており、これは予想通りです。

サポートされているインストールレシピを、よく知られたホスティング会社で使用していますか?

「いいね!」 1

最初の試みでは、次のようになりました。

github.com (github.com)|140.82.121.4|:443 に接続中…接続タイムアウトしました。
リトライ中。

デフォルトのインストール方法

「よく知られた」の定義によりますが、これはかなり大きなプレーヤーです。

なるほど、少なくとも妥当なIPアドレスに連絡しようとしているのですね。ルーティング、ファイアウォール、あるいはホスティング会社のレベルで何か問題があるのではないかと疑われます。

コンテナの外でテストを再実行すれば、コンテナ固有の問題なのか、それともより一般的なLinuxの問題なのかがわかるでしょう。

「いいね!」 1

コンテナ固有のものです。コンテナを変更したことがなく、サイトが約1.5年前のものであるため、何が原因で発生したのか理解するのに苦労しています。

コンテナの外で、そのテストを確実に実行できますか?

アプリの sanitised 版を共有していただけませんか? (何が起こっているのか全く分かりませんが、誰かが何かを見つけるかもしれません。)

現在のインストールの古さはどうですか?ダッシュボードによると、バージョンとIDは何ですか?

はい

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"
  db_shared_buffers: "128MB"
  #db_work_mem: "40MB"
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en
  UNICORN_WORKERS: 2
  DISCOURSE_HOSTNAME: domain.example.com

  #DOCKER_USE_HOSTNAME: true

  DISCOURSE_DEVELOPER_EMAILS: 'some@emails.com'

  DISCOURSE_SMTP_ADDRESS: smtp.domain.com
  DISCOURSE_SMTP_PORT: port
  DISCOURSE_SMTP_USER_NAME: email@email.com
  DISCOURSE_SMTP_PASSWORD: "password"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
  DISCOURSE_SMTP_DOMAIN: domain.com
  DISCOURSE_NOTIFICATION_EMAIL: email@email.com

  ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
  LETSENCRYPT_ACCOUNT_EMAIL: email@email.com

  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## The Docker container is stateless; all data is stored in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/discourse-math.git
          - git clone https://github.com/discourse/discourse-reactions.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/discourse/discourse-whos-online.git
          - git clone https://github.com/discourse/discourse-assign.git
          - git clone https://github.com/discourse/discourse-cakeday.git
          - git clone https://github.com/discourse/discourse-akismet.git
          - git clone https://github.com/discourse/discourse-data-explorer.git
          - git clone https://github.com/discourse/discourse-gamification
          - git clone https://github.com/discourse/discourse-checklist
          - git clone https://github.com/discourse/discourse-footnote
          - git clone https://github.com/discourse/discourse-yearly-review
          - git clone https://github.com/discourse/discourse-encrypt.git

## Any custom commands to run after building
run:
  - exec: echo "Beginning of custom commands"
  - exec: echo "End of custom commands"

注: プラグインなしでアプリをビルドしようとしましたが、Discourse 自体の取得に失敗するか、リストの 3 番目または 4 番目のプラグインのクローンに失敗します(つまり、2〜3 個のプラグインがあれば、3〜4 回の試行でアプリをビルドできます)。

3.0.0.beta15 にアップグレードしようとする直前は 2.9.0.beta14 でした。特定の ID は覚えていませんが、最後にアップグレードされたのは 12 月 25〜26 日頃でした。

使用しているプロバイダーについて、もう少し具体的に教えていただけると助かります。プロバイダーによってネットワークの複雑さが大きく異なります。\n\n目隠しをした状態でこの問題を解決するには、はるかに時間がかかるでしょう。

「いいね!」 4

情報を制限しようとしたのではなく、欧米の企業ではないため、その名前が何かを教えてくれるかどうかという問題でした。インスタンスは、ロシア最大のホスティング会社であるreg.ruによってホストされていました。いずれにせよ、今回は彼らのサポート[1]も役に立たなかったので、サイトをDigitalOceanに移行しました。同じ設定、Dockerインストールのために使用されたのと同じ手順で、すべてがうまくいきました(そしてうまくいっているようです)。


  1. 通常はかなり良い ↩︎

「いいね!」 2

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.