服务器没有绑定到Docker群中的端口

我有一个单机群(即一个主节点,就是这样),它有以下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给我一个IP的tcp://192.168.99.100:2376

web进程的Dockerfile也绝对公开了8000。 在本地,当我运行这个服务器时,它连接到8000端口没有问题。 但是,在vm中,当我curl 192.168.99.100:8001 (同样为8000 )时,它不会收到任何请求。 这是真的,即使我杀了虚拟机,并完全重新启动我的机器。

但是,如果我安装其他服务(例如,教程中的可视化工具),它们就可以正常工作。

这真让我抓狂! 我怎样才能弄清楚发生了什么?

另外,在vm中,我也不能调用curl localhost:8001 (它在重映射的端口上用于可视化器)。 任何帮助表示赞赏! 是否有下一步我可以采取debugging呢?

编辑: nc -zv 192.168.99.100 8001也变成什么都没有! (它适用于可视化工具)

编辑2: docker inspect CONTAINER显示:

  "Config": { "ExposedPorts": { "8001/tcp": {} }, }, "NetworkSettings": { "Ports": { "8001/tcp": null }, } 

docker inspect命令显示的工作示例(modulo暴露的端口号)是一样的

原来,火箭正在监听localhost而不是0.0.0.0 。 设置环境variablesROCKET_ADDRESS=0.0.0.0固定的东西。

在Docker教程示例python服务器中,将0.0.0.0更改为localhost也以同样的方式破坏了事物。

0.0.0.0,127.0.0.1和localhost有什么不同?