首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >socket.error:[errno 99]无法指定所请求的地址:烧瓶和python

socket.error:[errno 99]无法指定所请求的地址:烧瓶和python
EN

Stack Overflow用户
提问于 2018-04-04 05:20:16
回答 2查看 19.7K关注 0票数 3

我也有同样的问题,比如这里这里

我试图在container.It内运行一个烧瓶应用程序,它与'0.0.0.0‘很好地工作,但是它会抛出我的ip地址错误。

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

我有一个烧瓶应用程序运行在这个与主机对接。

代码语言:javascript
复制
if __name__ == "__main__":
    app.run(host= '0.0.0.0')

效果很好。但是当我把它改为ip地址时

代码语言:javascript
复制
if __name__ == "__main__":
        app.run(host= '10.***.**')

抛出错误:

socket.error:errno 99无法分配请求的地址

我使用一个简单的烧瓶应用程序再次检查了ip地址,该应用程序运行在本地(即没有停靠)。

代码语言:javascript
复制
 if __name__ == "__main__":
            app.run(host= '10.***.**')

效果很好。

所以问题只有在码头内运行时才会出现。这是因为我在运行NAT的路由器后面有内部ip地址。如何找到NAT的内部ip地址?我已经做了端口转发与端口5000烧瓶应用程序。

代码语言:javascript
复制
> 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-04 11:51:03

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

若要公开端口,需要

1)在Dockerfile中指定EXPOSE指令

2)运行带有-p <port_on_host>:<port_in_container>参数的容器。

例如:

Dockerfile:

代码语言:javascript
复制
FROM ubuntu:17.10

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

EXPOSE 80

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

内部版本:

代码语言:javascript
复制
docker build -t image_name .

运行:

代码语言:javascript
复制
docker run -d -p 80:80 image_name

检查:

代码语言:javascript
复制
curl http://localhost

请确保在运行容器之前,主机PC上的另一个应用程序不会使用80端口。如果该端口已经在使用--指定另一个端口,例如8080

代码语言:javascript
复制
docker run -d -p 8080:80 image_name

然后检查:

代码语言:javascript
复制
curl http://localhost:8080

医生是这里

票数 3
EN

Stack Overflow用户

发布于 2019-01-16 19:29:21

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

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

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

代码语言:javascript
复制
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 Praneuski‘只涉及Docker配置,所有这些都与docker容器设置相关,但没有指向Python环境修复(容器和普通安装)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49643331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档