Docker échoue parfois à se connecter à github.com

En essayant de mettre à niveau Discourse via ./launcher rebuild app, j’ai un problème avec

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

Cependant, le problème est le suivant : parfois, cela échoue même pour Discourse. Mais si vous essayez de le faire à nouveau, immédiatement après, sans aucun changement, cela peut réussir, mais échouer sur l’un des plugins. Si je supprime tous les plugins, la connexion Discourse peut échouer ou réussir et construire réellement l’ensemble.

J’ai vu ceci

mais je ne sais pas comment déboguer le réseau du conteneur.

1 « J'aime »

Vous n’avez pas exactement le problème décrit dans le fil que vous avez lié, et en effet, vous semblez avoir un problème intermittent, qui est toujours le plus difficile à diagnostiquer. Mais peut-être pourriez-vous essayer une récupération manuelle. J’ai essayé ceci, ce qui est inoffensif :

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

Nous voyons que “github.com” a été traduit en une adresse IP raisonnable, a été contacté et a renvoyé des données. En fait, la commande exécutée à l’intérieur du conteneur s’est comportée de manière très similaire à celle exécutée à l’extérieur du conteneur, et c’est ce à quoi on s’attendait.

Utilisez-vous une recette d’installation prise en charge, chez un hébergeur bien connu ?

1 « J'aime »

La première tentative a donné

Connexion à github.com (github.com)|140.82.121.4|:443... échec : délai d'attente de connexion dépassé.
Nouvel essai.

Méthode d’installation par défaut

dépend de la façon dont vous définissez “bien connue”, mais c’est un acteur assez important

OK, il essaie au moins de contacter une adresse IP raisonnable. Je suspecterais un problème de routage, de pare-feu, ou quelque chose qui ne va pas au niveau de l’hébergeur.

Si vous relancez le test en dehors du conteneur, vous verrez s’il s’agit d’un problème spécifique au conteneur ou d’un problème Linux plus général.

1 « J'aime »

C’est un problème spécifique au conteneur. J’ai du mal à comprendre ce qui a pu causer cela car je n’ai pas modifié le conteneur auparavant et le site a environ 1,5 an.

Hmm, donc, en dehors du conteneur, vous pouvez exécuter ce test de manière fiable ?

Peut-être pourriez-vous partager une version aseptisée de votre fichier app.yml ? (Je n’ai aucune idée de ce qui pourrait se passer, mais peut-être que quelqu’un remarquera quelque chose.)

Quel âge a l’installation actuelle - quelle version et quel ID a-t-elle, selon votre tableau de bord ?

oui

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter 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           # (optionnel, par défaut true)
  DISCOURSE_SMTP_DOMAIN: domain.com
  DISCOURSE_NOTIFICATION_EMAIL: email@email.com

  ## Si vous avez ajouté le template Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  LETSENCRYPT_ACCOUNT_EMAIL: email@email.com

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

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour les détails
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

## Toutes les commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  - exec: echo "Fin des commandes personnalisées"

Note : J’ai essayé de construire l’application sans aucun plugin. Soit elle ne parvient pas à récupérer discourse elle-même, soit elle ne parvient pas à cloner le 3ème ou 4ème plugin de la liste (ce qui signifie qu’avec seulement 2-3 plugins, je peux construire une application après 3-4 tentatives).

C’était 2.9.0.beta14 juste avant que j’essaie de passer à la version 3.0.0.beta15, je ne me souviens pas de l’ID spécifique, mais la dernière fois qu’elle a été mise à niveau, c’était vers le 25-26 décembre.

Cela aiderait certainement si vous étiez moins vague concernant le fournisseur que vous utilisez. Ils varient considérablement en termes de complexité de leurs réseaux.

Il faudra probablement beaucoup plus de temps pour résoudre ce problème les yeux bandés.

4 « J'aime »

Ce n’est pas que j’essayais de limiter les informations disponibles, c’est plutôt pour savoir si le nom vous dira quelque chose puisque ce n’est pas une entreprise occidentale. L’instance était hébergée par reg.ru, le plus grand hébergeur en Russie. Quoi qu’il en soit, leur support cette fois[1] n’a pas été utile non plus, alors j’ai déplacé mon site vers digital ocean. Avec les mêmes paramètres, la même procédure utilisée pour l’installation de docker, tout a fonctionné (et semble fonctionner) correctement.


  1. ils sont généralement assez bons ↩︎

2 « J'aime »

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