【问题标题】:Docker-Compose publishing ports on Host computer Nodejs + ExpressDocker-Compose 在主机 Nodejs + Express 上发布端口
【发布时间】:2017-07-25 12:23:51
【问题描述】:

我已经构建了一个 docker-compose 文件并想从我的主机访问我在 localhost:3000 上的 nodejs 应用程序,但发布端口似乎不起作用。

当我运行 compose-up 时,一切似乎都运行良好,我得到了确认 Listening on port 3000。但是,当我从浏览器访问 localhost:3000 以及 curl 时,我会收到未找到或超时响应。

我错过了什么吗?

我的 NodeJS 服务器:

var server = app.listen( process.env.PORT || 3000, function(){
  console.log('Listening on port ' + server.address().port);
});

我的 Docker-Compose.yml 文件:

version: "3"
services:
    api:
      image: baum-test:v0
      ports:
        - "3000:3000"
      networks:
        - webnet
    mongodb:
     image: mongo:latest
     ports:
       - "27017:27017"
     volumes:
       - ./data:/data
     deploy:
       placement:
         constraints: [node.role == manager]
     networks:
       - webnet
networks:
  webnet:

【问题讨论】:

  • 你有“约束:[node.role == manager]”你是在使用 docker swarm 还是只是从某个地方复制粘贴?你能试试 0.0.0.0 代替 localhost 吗?
  • 我正在测试 swarm 的功能,但忘记从我的撰写文件中删除它。我会尝试看看是否有帮助。
  • 您的撰写文件看起来不错。我想不出它不应该工作的另一个原因
  • 嗯,我试着冲进容器并从那里运行 curl,它似乎工作得很好,所以我不确定这里发生了什么
  • docker ps 返回什么?它是否列出了发布的端口?

标签: node.js express docker docker-compose


【解决方案1】:

如果您使用docker stack deploy 命令运行它,那么您可以在docker-compose.yml 中使用"constraints: [node.role == manager]"。如果您使用docker-compose up 命令来获取组合,那么您正在使用组合文件的 Swarm 功能,但在 docker-compose 上。完全删除以下部分

 deploy:
   placement:
     constraints: [node.role == manager]

【讨论】:

  • 我这样做了,但仍然遇到同样的问题
【解决方案2】:

由于我正在为 windows 运行 docker 工具(没有 hyper-v 的旧版本),我不得不手动声明 Docker VM Image IP 地址,因为它没有绑定到 localhost。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多