- 此问题在此处已有答案**:
Python requests in Docker Compose containers(1个答案)
3天前关闭。
我希望能够连接到一个第三方. NET API,我正在运行作为一个容器内的docker图像。当我连接到我的浏览器上的ip地址和端口,它的工作,但当我试图运行一个在python中的get请求,它没有。我不知道我做错了什么。
Django python应用程序是容器中的一个映像,使用0.0.0.0:8000。
这是我在一个容器中运行的. NET图像的docker-compose. yml文件:
mt4rest:
image: mt4rest:latest
ports:
- "0.0.0.0:5000:80"
以下是根据 Docker 检查的端口
"Ports": {
"443/tcp": null,
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "5000"
}
]
},
当我奔跑
http://0.0.0.0:5000/Ping
或
http://127.0.0.1:5000/Ping
在我的浏览器中,当我在Python中运行相同的端点时,我得到了OK:
response = requests.get('http://0.0.0.0:5000/Ping')
或
response = requests.get('http://127.0.0.1:5000/Ping')
我收到以下错误:
requests.exceptions.ConnectionError: HTTPConnectionPool(host='0.0.0.0', port=5000):
Max retries exceeded with url: /Ping (Caused by
NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fe7aa5af640>:
Failed to establish a new connection: [Errno 111] Connection refused'))
或
requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=5000):
Max retries exceeded with url: /Ping (Caused by
NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f6322e2b640>:
Failed to establish a new connection: [Errno 111] Connection refused'))
我理解这意味着没有找到请求的地址。
我不知道我做错了什么。
2条答案
按热度按时间b0zn9rqh1#
让我们把你的主机叫做HOST_BASE。你有两个容器,一个在主机上公开5000。它的HOST_BASE:5000。另一个是你的python应用容器。
现在,您正在主机
HOST_BASE
上的container中运行另一个python-app。http://0.0.0.0:5000
,不可访问。注意:它的0.0.0.0
是容器本身的本地主机。您希望连接到
HOST_BASE:5000
,而不是localhost
或0.0.0.0
您需要配置两个容器之间的网络连接。或者,为简单起见,在运行两个容器时使用--network host
。希望能有所帮助。
hgb9j2n62#
关于stackoverflow这个问题有一个可接受的答案,它解决了这个问题:
Python requests in Docker Compose containers