HTTPConnectionPool(host='0.0.0.0', port=5000): url 超出最大重试次数

Posted

技术标签:

【中文标题】HTTPConnectionPool(host=\'0.0.0.0\', port=5000): url 超出最大重试次数【英文标题】:HTTPConnectionPool(host='0.0.0.0', port=5000): Max retries exceeded with urlHTTPConnectionPool(host='0.0.0.0', port=5000): url 超出最大重试次数 【发布时间】:2020-07-19 02:21:44 【问题描述】:

我遇到这个错误,当我尝试从一个也使用 docker-compose 在端口 8000 上部署的 django 应用程序调用使用 docker-compose 在端口 5000 上部署的服务时。我也在使用 nginx

 ConnectionError at /documents/
 HTTPConnectionPool(host='localhost', port=5000): Max retries exceeded with url: 
 /api/documents (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 
 0x7f976607f290>: Failed to establish a new connection: [Errno 111] Connection refused'))

这是发出请求之前的请求对象

      kwargs  
  'data': None,
   'files': 'file': ('XXX',
                      <InMemoryUploadedFile: XXX.pdf (application/pdf)>,
                      'application/pdf',
                      ),
   'headers': 'Authorization': 'Token token=XXX',
               'Content-Type': 'application/pdf',
               'PSPDFKit-API-Version': '2020.1.3',
   'json': None
  method  
  'post'
  session 
  <requests.sessions.Session object at 0x7f954da972d0>
  url 
  'http://127.0.0.1:5000/api/documents'

这里是相关文件

码头工人撰写

version: '3.7'

services:
  web:
    build:
      context: ./www
      dockerfile: Dockerfile.prod
    command: gunicorn app.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - ./www:/usr/src/app
      - static_volume:/home/app/web/staticfiles
      - media_volume:/home/app/web/mediafiles
    expose:
      - 8000
    env_file: env.prod
    depends_on:
      - db
  db:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file: env.prod
  nginx:
    build: ./nginx
    volumes:
      - static_volume:/home/app/web/staticfiles
      - media_volume:/home/app/web/mediafiles
    ports:
      - 1337:80
    depends_on:
      - web
  pspdfkit:
    image: "pspdfkit/pspdfkit:2020.1"
    environment:
      PGUSER: XXX
      PGPASSWORD: XXX
      PGDATABASE: XXX
      PGHOST: db
      PGPORT: 5432

      # Activation key for your PSPDFKit Server installation.
      ACTIVATION_KEY: XXXX

      # Secret token used for authenticating API requests.
      API_AUTH_TOKEN: XXXX

      # Base key used for deriving secret keys for the purposes of authentication.
      SECRET_KEY_BASE: XXXX

      # Public key used for verification of JWTs from web clients. It has to be in the PEM format.
      JWT_PUBLIC_KEY: |
        -----BEGIN PUBLIC KEY-----
        XXXXTYYYYY
        -----END PUBLIC KEY-----
      JWT_ALGORITHM: RS256

      # Credentials to access the admin dashboard.
      DASHBOARD_USERNAME: XXX
      DASHBOARD_PASSWORD: YYY
    depends_on:
      - db
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - asset_storage:/srv/asset_storage

volumes:
  postgres_data:
  static_volume:
  media_volume:
  asset_storage:

nginx.conf

upstream app 
    server web:8000;



server 
    client_max_body_size 20M;
    listen 80;

    location / 
        proxy_pass http://app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    

    location /staticfiles/ 
        alias /home/app/web/staticfiles/;
    
    location /mediafiles/ 
        alias /home/app/web/mediafiles/;
    


Settings.py

  PSPDFKIT_SERVER_HOST = "http://127.0.0.1:5000"
  PSPDFKIT_EXTERNAL_SERVER = "http://127.0.0.1:5000"

我尝试将 url 更改为 localhost0.0.0.0pspdfkit(来自 docker-compose 文件)以及服务器的公共 ip,但我最终得到了上述错误除非我使用公共 ip 的情况(它无法建立连接)

我不太熟悉 nginx,所以我可能遗漏了一些导致此问题的重要配置步骤。帮助将不胜感激!

【问题讨论】:

几乎可以肯定是http://pspdfkit:5000。您是否应该将pspdfkit 添加到depends_on 以获取web,因为它需要可用? http://pspdfkit:5000 确实是正确的选择。当我使用pspdfkit:5000 时,我认为我的 JS 代码有问题。有两个不同的 url 用于访问 python 代码与 JS 代码的形式有帮助!感谢您的帮助! 【参考方案1】:

错误来自使用0.0.0.0

Docker 引入了一个虚拟网络,所以每个 docker-isntance 看到 本身作为 127 而不是主机

(感谢@Jmons)


要在本地启动您的代码,使用您的固定 IPv4 地址

对于 Windows 用户:打开命令提示符 (cmd) 并运行ipconfig 命令,检索位于IPv4 address. . . . . . . . . . . . . .:的@IP,其类型通常为 192.168.x.x IPv4 address in command prompt

【讨论】:

以上是关于HTTPConnectionPool(host='0.0.0.0', port=5000): url 超出最大重试次数的主要内容,如果未能解决你的问题,请参考以下文章

openstack host list执行报错

jenkinsapi出现HTTPConnectionPool Max retires exceeded异常

openstack问题收集

requests

pip 安装模块报错

ERROR (ConnectionError): HTTPConnectionPool (Caused by &lt;class &#39;socket.error&#39;