我试图在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
这里也适用OSError [Errno 99] - python的答案。
如果它使用ip地址但不使用主机名。
在
/etc/hosts
中删除双本地主机应该是解决方案。hosts文件应该如下所示(将ip映射到主机名)@Artsiom pranueski的回答只涉及Docker配置,这在Docker容器设置中都是相关的,但并不指向Python环境修复(容器和正常设置)。
要让局域网上的其他计算机连接到您的服务,只需使用
0.0.0.0
函数中的app.run()
地址,并将所需端口从docker容器公开到主机PC为了暴露你需要的端口
1)在Dockerfile中指定
EXPOSE
指令2)使用
-p <port_on_host>:<port_in_container>
参数运行容器。例如:
文档文件:
生成:
运行:
检查:
注意:在运行容器之前,请确保主机PC上的另一个应用程序未使用80端口。如果此端口已在使用中-请指定另一个端口,例如
8080
:然后检查:
文档是here。
相关问题 更多 >
编程相关推荐