socket.error:[errno 99]无法分配请求的地址:flask和python

2024-05-22 00:51:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我也有同样的问题,比如herehere

我试图在docker容器中运行一个flask应用程序。它在'0.0.0.0'中运行得很好,但它在我的ip地址中引发错误

我是公司代理人的幕后黑手。当我用ipconfig检查我的ip地址时,它显示ip地址为:10.***.**.**,我正在使用docker工具箱,其中我的容器ip为172.17.0.2,虚拟机ip地址为192.168.99.100。

我有一个烧瓶应用程序在这个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应用程序(即没有docker)再次检查了ip地址

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

它工作得很好。

所以这个问题只有在码头里面才会出现。那是因为我在一个路由器后面,它运行的是具有内部ip地址的NAT。我如何找到NAT的内部ip地址?我已经用端口5000完成了烧瓶应用的端口转发。

> 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

Tags: dockerrunnameipapp应用程序hostiptables
2条回答

这里也适用OSError [Errno 99] - python的答案。

如果它使用ip地址但不使用主机名。

/etc/hosts中删除双本地主机应该是解决方案。hosts文件应该如下所示(将ip映射到主机名)

127.0.0.1   localhost
127.0.1.1   your_hostname_here

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

@Artsiom pranueski的回答只涉及Docker配置,这在Docker容器设置中都是相关的,但并不指向Python环境修复(容器和正常设置)。

要让局域网上的其他计算机连接到您的服务,只需使用0.0.0.0函数中的app.run()地址,并将所需端口从docker容器公开到主机PC

为了暴露你需要的端口

1)在Dockerfile中指定EXPOSE指令

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

例如:

文档文件:

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

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

docker run -d -p 8080:80 image_name

然后检查:

curl http://localhost:8080

文档是here

相关问题 更多 >