连接到github.com的443端口失败:连接被拒绝,引导失败,Discourse Docker

3

在本地安装Discourse的/var/docker目录下运行./launcher bootstrap app命令时,我遇到了以下错误。

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

以下是我的containers/app.yml的内容。我一直在使用这个指南来尝试启动它。我听说有些人遇到了HTTP连接被拒绝的问题,因为iptables -L包含一些规则阻止了docker容器与互联网的连接。但是刚才它刚刚下载了一个镜像。所以我不明白。
##
## 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 $1;}' ~/.ssh/authorized_keys | awk 'BEGIN { print "Authorized SSH keys for this container:"; } NF>=2 {print $NF;}'
2个回答

2

您是否在代理后面?您已经检查过DNS设置了吗? 为了使其在/etc/default/docker中运行,我必须执行以下操作:

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

如果您没有添加DNS(您可以通过nslookup找到它),那么您可能无法解析GitHub的名称。但是,由于您尝试连接时没有明确返回未解析的名称,因此我认为您在这里不需要担心。但奇怪的是,我必须这样做才能使它正常工作。至于其他方面,我已经在GitHub上提出了问题并告诉您该怎么做:https://github.com/discourse/discourse_docker/issues/79 编辑: 我更正了一点,没有ln,应该写成“in”。正如我在GitHub上的问题中所说,代码中缺少代理考虑。但是,您是否有代理或直接访问网络?我打赌你有一个代理。如果是这样,请使用我提供的链接中的解决方案。基本上,如果在discourse镜像的环境变量中没有添加HTTP_PROXY,则依赖于它的任何命令都将无法工作(例如gem命令)。
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: 'xx@xx.com'      # (optional)
DISCOURSE_SMTP_PASSWORD: Password               # (optional)

此外,git有自己指定代理的方式,因此我在脚本中添加了它以使其运行。否则,当它尝试从存储库拉取时,git会卡住并超时(似乎是你的情况)。
更改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(应该也可以工作,事实上如果我回忆正确,我必须两者都做...)

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

to

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

更清晰了吗? 关于DNS,Docker在其配置文件中配置了许多内容。但令我惊讶的是,代理配置似乎从未被考虑过。然而,DNS部分很有趣,因为即使已经配置了公共DNS,我仍然遇到了名称解析错误。所以我添加了我的公司的DNS,神奇地解决了问题。但我不认为这是你的情况,我只是提一下......


@redlabo 抱歉,看起来我和你不在同一水平线上。我只是想在本地主机上设置它。这是否意味着我将使用代理?我希望从 localhost:3000 访问安装程序。或者我必须使用类似于 127.0.0.1:3128 的东西吗?我该怎么做? - Jonathan

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接