簡體   English   中英

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

[英]socket.error:[errno 99] cannot assign requested address : flask and python

我在這里這里都遇到同樣的問題

我正在嘗試在docker容器中運行flask應用程序,可以在'0.0.0.0'下正常運行,但是我的IP地址會拋出錯誤

我在公司代理后面。 當我使用ipconfig檢查我的IP地址時,它顯示的IP地址為: 10.***.**.**並且我正在使用docker toolbox,其中我的容器ip為172.17.0.2,VM IP地址為192.168.99.100。

我有一個帶有主機的docker內部運行的flask應用

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

工作正常。 但是當我將其更改為我的IP地址時

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

引發錯誤:

socket.error:[errno 99]無法分配請求的地址

我用一個在本地運行的簡單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上的其他計算機連接到您的服務,只需在app.run()函數中使用0.0.0.0地址, app.run()所需的端口從app.run()容器公開到主機PC。

要暴露端口,您需要

1)在Dockerfile中指定EXPOSE指令

2)使用-p <port_on_host>:<port_in_container>參數運行容器。

例如:

Dockerfile:

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

PS在運行容器之前,請確保主機PC上的另一個應用程序未使用80端口。 如果此端口已在使用中,請指定另一個端口,例如8080

docker run -d -p 8080:80 image_name

然后檢查:

curl http://localhost:8080

文件在這里

OSError [Errno 99]的答案-python在這里也適用。

如果使用IP地址但不使用主機名可以工作。

解決方案應在/etc/hosts刪除雙本地/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 Praneuski'的回答僅與Docker配置有關,這與Docker容器設置中的所有內容有關,但未指向Python環境修復(容器和常規設置)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM