0

我有一个 dockerised 烧瓶应用程序,其中包含下面提到的一些文件

码头工人文件app.py

我正在使用以下命令来构建和运行容器

# Create Virtual Network
$ sudo docker network create network_1

# Create Container
$ sudo docker build -t form_ocr:latest .
$ sudo docker run -d -p 6001:5000 --net network_1 --name form_ocr form_ocr

创建虚拟网络和容器后,IP 被分配给它们

网络network_1 IP:172.18.0.1

容器form_ocr内部IP:172.18.0.2

因此容器已启动并正在运行,并且从主机它应该可以在此路径上访问,0.0.0.0:6001但事实并非如此,我对正在运行的容器进行了一些故障排除,如下所述

命令输出netstat(容器内)

$ netstat -nltp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.11:46011        0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.5:5000          0.0.0.0:*               LISTEN      1/python3        

docker ps命令的输出

$ sudo docker ps
CONTAINER ID     IMAGE         COMMAND            CREATED             STATUS              PORTS                      NAMES
3c3f454ab515     form_ocr     "python3 app.py"    About an hour ago   Up About an hour    0.0.0.0:6001->5000/tcp     form_ocr

系统主机文件/etc/hosts

127.0.0.1       localhost
127.0.1.1       arush-pc
...

我有以下疑惑

Q1 为什么容器在提到127.0.0.5地址时监听?0.0.0.0app.py

Q1 如果容器正在监听地址127.0.0.5:5000,那么127.0.0.11:46011地址指的是什么?

我是 docker 的初学者,任何评论都会很有帮助

最小代码

4

1 回答 1

0

将您的容器本地服务器设置为在主机上运行,0.0.0.0​​而不是在127.0.0.1or上运行localhost。这样,您将映射所有肯定会拦截对端口的任何请求的接口5000

根据您使用的服务器,您将执行以下操作:


因为uvicorn你会有类似的东西

uvicorn --reload --host 0.0.0.0 --port 5000 main:app


因为gunicorn它会是这样的

gunicorn --reload --bind 0.0.0.0:5000 main:app

于 2022-02-16T04:27:17.247 回答