2つのDockerコンテナーがあります。
fastapi;uvicorn
で実行されましたGET
リクエストをhttp://0.0.0.0
に送信するクライアントバッシングcurl -X GET http://0.0.0.0
が期待どおりに機能するため、サーバーは正常に機能しているようです。しかし、私のDockerクライアントはアクセスできないようです。
クライアントコンテナー(以下のファイル)をビルドした後、docker run -it --name app_client_container app_client:latest
を実行すると、次のエラーが表示されます。
requests.exceptions.ConnectionError:HTTPConnectionPool(Host = '0.0.0.0'、port = 80):最大再試行回数は次のURLで超過しました:/(NewConnectionErrorが原因( ':新しい接続を確立できませんでした:Errno 111接続が拒否されました'))
私のプロジェクトはこのように見えます
|- client.Dockerfile
|- client.py
|- client_req.txt
|- server.Dockerfile
|- server.py
|- server_req.txt
クライアント
# client.Dockerfile
FROM python:3.8
WORKDIR /srv
WORKDIR /srv
ADD client_req.txt /srv/client_req.txt
RUN pip install -r client_req.txt
ADD . /srv
CMD python /srv/client.py
# client.py
import json
import requests
import traceback
try:
response = requests.get('http://0.0.0.0', timeout=5)
print(json.dumps(response.json(), indent=4))
except Exception as e:
print('Connection could not be established :(')
print('Here is more information:')
traceback.print_exc()
# client_req.txt
requests
サーバー
# server.Dockerfile
FROM python:3.8
WORKDIR /srv
ADD server_req.txt /srv/server_req.txt
RUN pip install -r server_req.txt
EXPOSE 80
ADD . /srv
CMD uvicorn server:app --Host 0.0.0.0 --port 80 --reload
# server.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
# server_req.txt
fastapi
uvicorn
default docker bridge network を使用することもできます。
IPアドレスを次のように設定します:172.17.0.1(Macの場合はdocker.for.mac.Host.internal)
これはうまくいくはずです:
response = requests.get('http://172.17.0.1', timeout=5)