docker - flask docker - equests.exceptions.ConnectionError:HTTPConnectionPool(host ='localhost',port = 8080):url超过最大重试次数:/users
问题描述
我有 python 烧瓶应用程序,它侦听在 8080 上运行的另一个微服务。当我作为烧瓶应用程序运行时,它能够从 http://localhost:8080/users 获取。
但是当我在 docker 内运行时,它失败了
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /users (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f53804b5dc0>: Failed to establish a new connection: [Errno 111] Connection refused'))
在线:
File "/alert.py", line 45, in get_users
r = requests.get('http://localhost:8080/users',verify=False)
这是我的主要代码:
if __name__ == '__main__':
app.logger.setLevel(logging.INFO)
data = create_data()
port = os.getenv('PORT')
app.run(debug=True, host='0.0.0.0', port=port)
码头工人脚本:
#!/bin/bash
docker build -t covid_service .
docker run -p 5000:5000 covid_service
码头工人文件:
FROM python:3
ADD alert.py /
RUN pip install flask
RUN pip install requests
EXPOSE 5000
CMD [ "python", "./alert.py" ]
请提供任何帮助
解决方案
equests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /users (由 NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f53804b5dc0>: 无法建立新连接) : [Errno 111] 连接被拒绝'))
您不能使用 访问另一个容器localhost
,这localhost
意味着烧瓶应用程序容器不是另一个微服务。
在 Linux 上将其更改localhost
为HOST_IP或host.docker.internal
用于 windows 和 mac。
r = requests.get('http://host.docker.internal:8080/users',verify=False)
推荐阅读
- svg - SVG 中 Chrome 中的 clipPathUnits="objectBoundingBox" 单位错误
- algorithm - 所需的最少操作
- python - 使用 XGBClassifier 转储具有特征图的 XGBoost 模型
- swift - ios13 UIPopoverViewController 显示 UITableViewController - 安全区域问题/表的缺失部分
- python-3.x - 这在python中可能吗?
- netlogo - 如何在 Netlogo 中绘制函数?
- firemonkey - 自定义 Android 权限请求消息?
- java - 为什么我创建的 contains 方法不比较我的对象?
- sql - 根据城市 ID 显示国家/地区?
- python - jupyter notebook 和 python 中的“if”子句中的参数太多