web-dev-qa-db-ja.com

Dockerコンテナからローカルホストにアクセスできない

問題

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
2
user101

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)
0
Jiri