簡體   English   中英

GET 請求在 docker 容器中沒有響應

[英]GET request not responding in docker container

我有一個在 docker 容器中運行的fastapi應用程序,該容器連接到也作為容器運行的 PostgreSQL 數據庫。 我在docker-compose.yml文件中都有這兩個信息。

在應用程序中,我有一個POST端點,它使用requests庫從外部 API ( https://restcountries.com/v2/all ) 請求數據。 提取數據后,我試圖將其保存在數據庫中的表中。 當我從 docker 容器觸發端點時,它需要很長時間,並且不會從 API 中提取數據。 但同時,當我在 docker 容器外運行相同的代碼時,它會立即執行並接收數據。

docker-compose.yml文件:

version: "3.6"

services:
  backend-api:
    build:
      context: .
      dockerfile: docker/Dockerfile.api
    volumes:
      - ./:/srv/recruiting/
    command: uvicorn --reload --reload-dir "/srv/recruiting/backend" --host 0.0.0.0 --port 8080 --log-level "debug" "backend.main:app"
    ports:
      - "8080:8080"
    networks:
      - backend_network
    depends_on:
      - postgres

  postgres:
    image: "postgres:13"
    volumes:
      - postgres_data:/var/lib/postgresql/data/pgdata:delegated
    environment:
      - PGDATA=/var/lib/postgresql/data/pgdata
      - POSTGRES_PASSWORD=pgpw12
    expose:
      - "5432"
    ports:
      - "5432:5432"
    networks:
      - backend_network

volumes:
  postgres_data: {}

networks:
  backend_network: {}

發出請求的代碼:

req = requests.get('https://restcountries.com/v2/all')
json_data = req.json()

我錯過了什么或做錯了什么?

我經常在我的 python 容器中使用 python 請求,並且遇到過幾次這個問題。 我還沒有找到合適的解決方案,但重新啟動 Docker Desktop(完全重新啟動它,而不僅僅是重新啟動容器)似乎每次都有效。 我過去發現有幫助的是在調用 HTTP 調用時指定超時時間:

requests.request(method="POST", url=url, json=data, headers=headers, timeout=2)

當服務器在超時時間內沒有發送數據時,會引發異常。 至少您會意識到這個問題,並且會浪費更少的時間來確定何時再次發生這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM