Docker a volte non riesce a connettersi a github.com

Mentre tento di aggiornare Discourse tramite ./launcher rebuild app riscontro un problema con

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

Tuttavia, il problema è: a volte questo fallisce anche per discourse. Ma se si tenta di farlo di nuovo, subito dopo, senza modifiche, potrebbe funzionare, ma fallire su uno dei plugin. Se rimuovo tutti i plugin, la connessione discourse potrebbe fallire o potrebbe funzionare e costruire effettivamente l’intera cosa.

Ho visto questo

ma non so come eseguire il debug della rete del container.

1 Mi Piace

Non hai esattamente il problema descritto nel thread che hai collegato, e infatti sembri avere un problema intermittente, che è sempre il più difficile da diagnosticare. Ma forse potresti provare un recupero manuale. Ho provato questo, che è innocuo:

# 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
#

Vediamo che “github.com” è stato tradotto in un indirizzo IP ragionevole, è stato contattato e ha restituito alcuni dati. Infatti il comando eseguito all’interno del container si è comportato in modo molto simile a come si comporta al di fuori del container, e questo è prevedibile.

Stai usando una ricetta di installazione supportata, su un provider di hosting noto?

1 Mi Piace

Il primo tentativo ha dato

Connecting to github.com (github.com)|140.82.121.4|:443... failed: Connection timed out.
Retrying.

Metodo di installazione predefinito

dipende da come definisci “well-known”, ma questo è un attore abbastanza importante

OK, quindi sta almeno tentando di contattare un indirizzo IP ragionevole. Sospetterei qualcosa di sbagliato nel routing, o nel firewall, o qualcosa di sbagliato a livello dell’azienda di hosting.

Se riesegui il test al di fuori del container, vedrai se hai un problema specifico del container o un problema più generale di Linux.

1 Mi Piace

È specifico del container. Sto lottando per capire cosa potrebbe aver causato questo, dato che non ho modificato il container prima e il sito ha circa 1,5 anni.

Hmm, quindi, al di fuori del container, puoi eseguire quel test in modo affidabile?

Forse potresti condividere una versione sanificata del tuo app.yml? (Non ho idea di cosa possa succedere, ma forse qualcuno noterà qualcosa.)

Quanto è vecchia l’installazione attuale - quale versione e quale ID ha, secondo la tua dashboard?

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"

Nota: Ho provato a creare l’app senza plugin. O non riesce a recuperare discourse stesso o non riesce a clonare il 3° o 4° plugin nell’elenco (il che significa che con solo 2-3 plugin posso creare un’app dal 3°-4° tentativo).

Era 2.9.0.beta14 appena prima che provassi ad aggiornare a 3.0.0.beta15, non ricordo l’ID specifico ma l’ultima volta che è stato aggiornato è stato intorno al 25-26 dicembre.

Ti aiuterebbe sicuramente essere meno vago riguardo al provider che stai utilizzando. Variano enormemente in termini di complessità delle loro reti.

È probabile che ci vorrà molto più tempo per risolvere questo problema bendati.

4 Mi Piace

Non è che stessi cercando di limitare le informazioni disponibili, è più una questione se il nome ti dirà qualcosa dato che non è un’azienda occidentale. L’istanza era ospitata da reg.ru, il più grande hoster in Russia. Comunque, il loro supporto questa volta[1] non è stato d’aiuto, quindi ho spostato il mio sito su digital ocean. Con le stesse impostazioni, la stessa procedura utilizzata per l’installazione di docker, tutto ha funzionato (e sembra funzionare) bene.


  1. di solito sono abbastanza bravi ↩︎

2 Mi Piace

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