Docker falha às vezes ao conectar-se ao github.com

Ao tentar atualizar o Discourse via ./launcher rebuild app, recebo um problema com

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

No entanto, o problema é: às vezes isso falha mesmo para o Discourse. Mas se você tentar fazer isso novamente, imediatamente depois, sem alterações, pode funcionar, mas falhar em um dos plugins. Se eu remover todos os plugins, a conexão do Discourse pode falhar ou pode funcionar e realmente construir tudo.

Eu já vi isso

mas eu não sei como depurar a rede do contêiner.

1 curtida

Você não tem exatamente o problema descrito no tópico que você vinculou, e de fato parece ter um problema intermitente, que é sempre o mais difícil de diagnosticar. Mas talvez você possa tentar um fetch manual. Eu tentei isso, o que é inofensivo:

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

Vemos que “github.com” foi traduzido para um endereço IP razoável, foi contatado e retornou alguns dados. Na verdade, o comando executado dentro do contêiner se comportou de maneira muito semelhante a como se comporta fora do contêiner, e isso é esperado.

Você está usando uma receita de instalação suportada, em uma empresa de hospedagem conhecida?

1 curtida

A primeira tentativa resultou em

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

Método de instalação padrão

depende de como você define conhecida, mas este é um player bastante grande

OK, então ele está pelo menos tentando contatar um endereço IP razoável. Suspeitaria de algo errado com o roteamento, ou firewall, ou algo errado no nível da empresa de hospedagem.

Se você executar o teste novamente fora do contêiner, verá se tem um problema específico do contêiner ou um problema mais geral do Linux.

1 curtida

É um problema específico do contêiner. Estou tendo dificuldades para entender o que pode ter causado isso, pois não modifiquei o contêiner antes e o site tem cerca de 1,5 ano.

Hmm, então, fora do contêiner, você consegue executar esse teste de forma confiável?

Talvez você possa compartilhar uma versão higienizada do seu app.yml? (Não tenho ideia do que pode estar acontecendo, mas talvez alguém perceba algo.)

Qual a idade da instalação atual - qual versão e qual ID ela tem, de acordo com seu painel?

sim

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Descomente estas duas linhas se desejar adicionar 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           # (opcional, padrão true)
  DISCOURSE_SMTP_DOMAIN: domain.com
  DISCOURSE_NOTIFICATION_EMAIL: email@email.com

  ## Se você adicionou o template Lets Encrypt, descomente abaixo para obter um certificado SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: email@email.com

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

## O contêiner Docker é sem estado; todos os dados são armazenados em /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins vão aqui
## veja https://meta.discourse.org/t/19157 para detalhes
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

## Quaisquer comandos personalizados para executar após a compilação
run:
  - exec: echo "Início dos comandos personalizados"
  - exec: echo "Fim dos comandos personalizados"

Nota: Tentei compilar o aplicativo sem nenhum plugin. Ele falha ao buscar o próprio discourse ou falha ao clonar o 3º ou 4º plugin na lista (o que significa que com apenas 2-3 plugins, consigo compilar um aplicativo a partir da 3ª-4ª tentativa).

Era 2.9.0.beta14 pouco antes de eu tentar atualizar para 3.0.0.beta15, não me lembro do ID específico, mas a última vez que foi atualizado foi em algum momento entre 25 e 26 de dezembro.

Com certeza ajudaria se você fosse menos vago em relação ao provedor que está usando. Eles variam muito em termos da complexidade de suas redes.

É provável que leve muito mais tempo para solucionar isso de olhos vendados.

4 curtidas

Não é que eu estivesse tentando limitar as informações disponíveis, é mais sobre se o nome lhe dirá algo, já que não é uma empresa ocidental. A instância foi hospedada pela reg.ru, a maior hospedagem na Rússia. De qualquer forma, o suporte deles desta vez[1] não foi útil, então mudei meu site para a DigitalOcean. Com as mesmas configurações, o mesmo procedimento usado para a instalação do Docker, tudo funcionou (e parece funcionar) bem.


  1. eles geralmente são bons ↩︎

2 curtidas

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