我在码头工人的容器内运行枪炮。我知道这是有效的,因为sshing到它并卷曲localhost:8000 / docker容器中的东西给了我想要的响应,但是,我无法在我的主机上达到这个,尽管docker告诉我端口已被映射。是什么给了什么?
我跑了
docker run -d -p 80:8000 myapp:version1.1 /bin/bash -c 'gunicorn things:app'
docker ps
给了我
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
614df1f2708e myapp:version1.1 "/bin/bash -c 'gunico" 6 minutes ago Up 6 minutes 5000/tcp, 0.0.0.0:80->8000/tcp evil_stallman
在我的主人身上,冰壶locahost /东西给了我
curl: (52) Empty reply from server
然而,当我docker exec -t -i 614df1f2708e /bin/bash
然后curl localhost:8000/things
时,我成功地得到了正确答案。
为什么我的端口8000无法正确映射?
答案 0 :(得分:11)
当您发布端口时,Docker会将请求转发到容器中,但容器需要监听它们。容器具有来自Docker网络的IP地址,您的应用程序需要侦听该地址。
Check your gunicorn bind setting - 如果它只是在127.0.0.1:8000
上侦听,那么它不会绑定到容器的IP地址,也不会从外部获取请求。 0.0.0.0:8000
是安全的,因为它会绑定到所有地址。