服务器没有绑定到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有什么不同?