我有一个机器群(即一个主节点,就是它),它有以下docker-compose.yml
文件:
version: "3"
services:
web:
image: rbalicki/hellorocket:latest
ports:
- "8001:8000"
depends_on:
- "db"
environment:
- DATABASE_URL=postgres://docker:docker@db:5432/pw_back
command: cargo run # this runs the server
db:
image: rbalicki/pg:latest
根据教程我运行以下命令:
docker-machine create --driver virtualbox myvm1
docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"
docker-machine scp docker-compose.yml myvm1:~
docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml hellorocketstack"
docker machine ls
为我提供了tcp://192.168.99.100:2376
的IP。
web
进程的Dockerfile肯定会暴露8000。在本地,当我运行此服务器时,它连接到端口8000没有任何问题。但是,在vm中,当我卷曲192.168.99.100:8001
时,它不会收到任何请求(同样适用于8000
)。这是事实,即使我杀死虚拟机并完全重启我的机器。
但是,如果我安装其他服务(例如可视化工具,来自教程),它们的工作正常。
这让我抓狂!我怎样才能弄清楚发生了什么?
此外,在vm中,我也无法调用curl localhost:8001
(适用于可视化工具,在重映射端口)。任何帮助表示赞赏!我可以采取下一步调试吗?
编辑:nc -zv 192.168.99.100 8001
也没有任何结果! (适用于可视化工具)
Edit2:docker inspect CONTAINER
显示:
"Config": {
"ExposedPorts": {
"8001/tcp": {}
},
},
"NetworkSettings": {
"Ports": {
"8001/tcp": null
},
}
与docker inspect
命令显示的工作示例(模数暴露的端口号)相同
答案 0 :(得分:1)
原来火箭正在聆听localhost
而不是0.0.0.0
。设置环境变量ROCKET_ADDRESS=0.0.0.0
固定的东西。
在Docker教程示例python服务器中,将0.0.0.0
更改为localhost
也会以完全相同的方式破坏事物。
What is the difference between 0.0.0.0, 127.0.0.1 and localhost?