我有两个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
答案 0 :(得分:2)
尝试使用docker run ... --net=host ...
尽管服务器向主机公开了:80
,但是默认情况下,主机的网络不可用于其他容器。也就是说,主机的:80
在其他(包括客户端)容器内不可用。
或者,您可以:
答案 1 :(得分:0)
您也可以使用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)