服务器未绑定到docker swarm中的端口

时间:2017-07-29 22:49:15

标签: docker docker-compose dockerfile

我有一个机器群(即一个主节点,就是它),它有以下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命令显示的工作示例(模数暴露的端口号)相同

1 个答案:

答案 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?