git 无法连接到 github.com 端口 443:连接被拒绝,无法引导,Discourse Docker

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24873340/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-10 18:20:22  来源:igfitidea点击:

Failed to connect to github.com port 443: Connection refused, Failed to Bootstrap, Discourse Docker

gitgithubdockerdiscourse

提问by Jonathan

Whilst running my ./launcher bootstrap appcommand from /var/dockeron a local installation of Discourse, I get this error.

在本地安装的 Discourse 上运行我的./launcher bootstrap app命令时/var/docker,出现此错误。

fatal: unable to access 'https://github.com/SamSaffron/pups.git/': Failed to connect to github.com port 443: Connection refused
FAILED TO BOOTSTRAP

The following is the contents of my containers/app.yml. I've been using thisguide to try to get it up and running. I've heard of some people having issues with HTTP connections refused due to iptables -Lcontaining some rules blocking the docker containerfrom connecting to the internet. But it moments before just downloaded an image. So I don't understand.

以下是我的内容containers/app.yml。我一直在使用指南来尝试启动并运行它。我听说有些人因为iptables -L包含一些阻止 docker 容器连接到互联网的规则而拒绝 HTTP 连接的问题。但它刚刚下载了一个图像。所以我不明白。

##
## After making changes to this file, you MUST rebuild for any changes
## to take effect in your live Discourse instance:
## 
## /var/docker/launcher rebuild app
##

## this is the all-in-one, standalone Discourse Docker container template
templates:
  - "templates/cron.template.yml"
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/sshd.template.yml"
  - "templates/web.template.yml"

## which TCP/IP ports should this container expose?
expose:
  - "127.0.0.1:20080:80"   # fwd host port 80   to container port 80 (http)
  - "2222:22" # fwd host port 2222 to container port 22 (ssh)

params:
  ## Which Git revision should this container use?
  version: HEAD

env:
  ## How many concurrent web requests are supported?
  ## With 2GB we recommend 3-4 workers, with 1GB only 2
  # UNICORN_WORKERS: 3
  ##
  ## List of comma delimited emails that will be made admin on signup
  DISCOURSE_DEVELOPER_EMAILS: <%= ENV['EMAIL_ADDRESS'] %>
  ##
  ## The domain name this Discourse instance will respond to
  DISCOURSE_HOSTNAME: 'localhost'
  ##
  ## The mailserver this Discourse instance will use
  DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
  DISCOURSE_SMTP_PORT: 465
  DISCOURSE_SMTP_USER_NAME: <%= ENV['GMAIL_USERNAME'] %>
  DISCOURSE_SMTP_PASSWORD: <%= ENV['GMAIL_PASSWORD'] %>
  ##
  ## the origin pull CDN address for this Discourse instance
  # DISCOURSE_CDN_URL: //discourse-cdn.example.com

## These containers are stateless, all data is stored in /shared
volumes:
  - volume:
      host: /var/docker/shared/standalone
      guest: /shared

## The docker manager plugin allows you to one-click upgrade Discouse
## http://discourse.example.com/admin/docker
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Remember, this is YAML syntax - you can only have one block with a name
run:
  - exec: echo "Beginning of custom commands"

  ## If you want to configure password login for root, uncomment and change:
  #- exec: apt-get -y install whois # for mkpasswd
  ## Use only one of the following lines:
  #- exec: /usr/sbin/usermod -p 'PASSWORD_HASH' root
  #- exec: /usr/sbin/usermod -p "$(mkpasswd -m sha-256 'RAW_PASSWORD')" root

  ## If you want to authorized additional users, uncomment and change:
  #- exec: ssh-import-id username
  #- exec: ssh-import-id anotherusername

  - exec: echo "End of custom commands"
  - exec: awk -F\# '{print ;}' ~/.ssh/authorized_keys | awk 'BEGIN { print "Authorized SSH keys for this container:"; } NF>=2 {print $NF;}'

回答by redlabo

Are you behind a proxy ? Have you checked your DNS settings ? This is what I had to do in order to make it run in /etc/default/docker:

你背后有代理吗?你检查过你的 DNS 设置吗?这是我必须做的才能让它运行/etc/default/docker

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --dns x.x.x.x"

If you don't add your DNS (you can find it with nslookup), chance are that you can't resolve the name of GitHub. But as your attempt to connect does not return explicitly a name not resolved, I don't think you are concerned here. But strangely, I had to do it to make it work. For the rest I already mentioned what to do in an issue filled on GitHub: https://github.com/discourse/discourse_docker/issues/79

如果您不添加您的 DNS(您可以使用 找到它nslookup),您可能无法解析 GitHub 的名称。但是由于您的连接尝试没有明确返回未解析的名称,因此我认为您不必担心。但奇怪的是,我必须这样做才能让它发挥作用。其余的我已经提到了在 GitHub 上填写的问题中要做什么:https: //github.com/discourse/discourse_docker/issues/79

Edit:I corrected the point, there's no ln, it should read 'in'. As I said in my issue to GitHub, there's a lack of proxy consideration in code. But have you a proxy or a direct access to web ? I bet you have a proxy. If so, take my solution in the link I provided. Basically, if HTTP_PROXY is not added in the environment variables of the image of discourse, no command that relies on it will work (like in the gem command case).

编辑:我更正了这一点,没有 ln,它应该读为“in”。正如我在给 GitHub 的问题中所说的那样,代码中缺乏对代理的考虑。但是你有代理或直接访问网络吗?我打赌你有一个代理。如果是这样,请在我提供的链接中获取我的解决方案。基本上,如果没有在话语图像的环境变量中添加 HTTP_PROXY,则依赖它的任何命令都不会起作用(就像在 gem 命令的情况下一样)。

Example:

例子:

DISCOURSE_SMTP_ADDRESS: smtp.mandrillapp.com                # (mandatory)
HTTP_PROXY: http://x.x.x.x:3128/ # my add
DISCOURSE_SMTP_PORT: 587                        # (optional)
DISCOURSE_SMTP_USER_NAME: '[email protected]'      # (optional)
DISCOURSE_SMTP_PASSWORD: Password               # (optional)

In addition, git has its own way of specifying proxy, so I add it in the script to make it run. Otherwise, git will be stuck and timeout will occcur when it will try to pull from repository (seems to be your case).

另外,git有自己指定代理的方式,所以我在脚本中添加,让它运行。否则,当它尝试从存储库中提取时,git 将被卡住并超时(似乎是你的情况)。

Replacement in launcher script of discourse:

替换启动脚本中的话语:

run_command="$run_command git pull &&"

to

run_command="$run_command git config --global http.proxy http://x.x.x.x:3128/ && git pull &&"

And/Or (should work too, and in fact if I recall correctly I had to do both...)

和/或(也应该有效,事实上,如果我没记错的话,我必须两者都做......)

/bin/bash -c "$run_command") \

to

/bin/bash -c "git config --global http.proxy http://x.x.x.x:3128/;$run_command") \

Clearer ? Concerning the dns, docker configure a lot of things in its configuration file. But to my surprise, the proxy configuration never seemed to be taken into account.Yet, the dns part was interesting as I got error of name resolution too, despite the public dns already configured. So I add the dns of my company, and magically it solved the problem. But I don't think this is your situation, I mentioned this just in case...

更清楚?关于dns,docker在其配置文件中配置了很多东西。但令我惊讶的是,代理配置似乎从未被考虑在内。然而,尽管公共 dns 已经配置,但 dns 部分很有趣,因为我也遇到了名称解析错误。所以我添加了我公司的dns,神奇地解决了这个问题。但我不认为这是你的情况,我提到了这一点以防万一......

回答by MrSo