gpt4 book ai didi

python - 套接字错误 :[errno 99] cannot assign requested address : flask and python

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:09 26 4
gpt4 key购买 nike

我遇到了同样的问题 herehere

我正在尝试在 docker 容器中运行一个 flask 应用程序。它在“0.0.0.0”下运行良好,但它会抛出我的 ip 地址错误

我在公司代理后面。当我用 ipconfig 检查我的 ip 地址时,它显示 IP 地址为:10.***.**.** 我正在使用 docker 工具箱,其中我的容器 ip 是 172.17.0.2 和 VM IP地址是 192.168.99.100。

我有一个 flask 应用程序在这个带有主机的 docker 中运行

if __name__ == "__main__":
app.run(host= '0.0.0.0')

工作正常。但是当我把它改成我的 ip 地址时

if __name__ == "__main__":
app.run(host= '10.***.**')

抛出错误:

socket.error:[errno 99] cannot assign requested address

我用一个在本地运行的简单 flask 应用程序再次检查了 ip 地址(即没有 docker)

 if __name__ == "__main__":
app.run(host= '10.***.**')

它运行良好。

所以只有在 docker 中运行时才会出现问题。那是因为我在使用内部 IP 地址运行 NAT 的路由器后面。我如何通过 NAT 找到这个内部 IP 地址?我已经用端口 5000 为 flask 应用程序完成了端口转发。

> iptables -t nat -A DOCKER -p tcp --dport 5000 -j DNAT --to-destination 172.17.0.2:5000
> iptables -t nat -A POSTROUTING -j MASQUERADE -p tcp --source 172.17.0.2 --destination 172.17.0.2 --dport https
> iptables -A DOCKER -j ACCEPT -p tcp --destination 172.17.0.2 --dport https

最佳答案

要让 LAN 上的其他计算机连接到您的服务,只需使用 0.0.0.0地址在app.run()运行并将所需的端口从您的 docker 容器公开到您的主机 PC。

要暴露你需要的端口

1) 指定EXPOSE Dockerfile 中的指令

2) 使用 -p <port_on_host>:<port_in_container> 运行容器参数。

例如:

docker 文件:

FROM ubuntu:17.10

RUN apt-get update && apt-get install -y apache2

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]

构建:

docker build -t image_name .

运行:

docker run -d -p 80:80 image_name

检查:

curl http://localhost

附言在运行容器之前,请确保 80 端口未被主机 PC 上的其他应用程序使用。如果此端口已被使用 - 指定另一个端口,例如 8080 :

docker run -d -p 8080:80 image_name

然后检查:

curl http://localhost:8080

文档是 here .

关于python - 套接字错误 :[errno 99] cannot assign requested address : flask and python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49643331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com