【问题标题】:Docker Node JS InstallationDocker 节点 JS 安装
【发布时间】:2017-06-21 23:01:39
【问题描述】:

我是 docker 的新手,我正在尝试遵循他们列出的节点 js 教程:https://docs.docker.com/examples/nodejs_web_app/

我按照本教程进行操作,在测试部分之前一切似乎都很好,我无法卷曲到指定的端口。

$ curl -i localhost:49160
curl: (7) Failed to connect to localhost port 49160: Connection refused

$ docker ps
CONTAINER ID        IMAGE                          COMMAND                CREATED             STATUS              PORTS                     NAMES
21e727bc5a7d        username/docker-test   "node /src/index.js"   13 minutes ago      Up 13 minutes       0.0.0.0:49160->8080/tcp   gloomy_heisenberg
$ docker logs 21e727bc5a7d 
Running on localhost:8080

$ docker exec -it 21e727bc5a7d bash
[root@21e727bc5a7d /]# netstat -tulpn 
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1/node'

不确定我是否对某事感到困惑或如何解决此问题,有什么想法吗?

【问题讨论】:

  • 你是在 Linux 上使用它还是在 boot2docker 上使用它?
  • @R0MANARMY 我正在我的 Mac 上运行安装,并逐字按照链接中的说明进行操作。它是在 centos 映像之上启动的。不确定我是否回答了你的问题,但就像我说的我对 docker 完全陌生,所以我可能会对很多与之相关的事情感到困惑。从来没有运行过任何 boot2docker 命令,也知道我在 virtualbox 上运行了一些东西。 virtualbox 确实说操作系统是 linux 但在 SATA 端口中提到了 boot2docker。
  • 听起来 boo2docker 没有正确地将 localhost 请求转发到正在运行的 vm docker。您可以通过从虚拟框中获取 boo2docker vm 的 IP 地址并尝试访问您的节点来确认这一点网址为 http://:49160。如果您收到响应,那么只是 localhost 没有被转发到您的虚拟机,如果没有,那就是别的东西了。
  • 你的问题终于解决了吗?我很感兴趣,因为我遇到了同样的错误。

标签: node.js docker boot2docker


【解决方案1】:

这是解决方案:

  1. 像这样运行你的应用程序:

    docker run --rm -i -t -p 49160:8080 <your username>/centos-node-hello

    输出应该会说正在侦听端口 8080。 这意味着应用程序正在运行

  2. 打开另一个 docker CLI 终端并输入:

    docker-machine ls

    您将看到 IP 地址和端口。示例:192.168.99.100:<some-number>

  3. 转到浏览器并键入 IP 地址和导出的端口号。

    在这种情况下,192.168.99.100:49160,您的网站应该会出现。

希望对你有帮助。

【讨论】:

  • 在您的情况下,您的运行命令将是 docker run --rm -i -t -p 49160:8080 username/docker-test
  • 如果这不能解决我的问题,我还能做什么?实际上我做错了节点应用程序中的任何内容吗?
【解决方案2】:

我遇到了同样的问题,发现这是由于boot2docker 没有将我的 localhost 转发到运行 Docker 的虚拟机。

像这样找出运行 Docker 的 VM 的 IP:

$ boot2docker ip

你会看到如下输出:

$ 192.168.99.102

使用它提供的打印输出,在该 IP 上卷曲您指定的端口。例如:

$ curl -i 192.168.99.102:49160

【讨论】:

    【解决方案3】:

    如果你使用的是 Mac OS X 并且已经使用 Docker Toolbox 安装了 docker,你可以使用:

        curl $(docker-machine ip default):49160
    

    【讨论】:

      【解决方案4】:

      我至少可以告诉你如何解决这个问题。

      首先检查日志,您需要容器 ID 来执行此操作。你使用docker ps获取容器的id

      运行docker <id> logs 以查看日志。您的命令可能返回错误。

      如果您想更深入地了解,您可以在容器上启动一个 BASH shell。运行此命令docker exec -it <id> bash,这将为您提供容器上的外壳以进行故障排除。 shell 是容器的同一个实例,因此您可以对正在运行的服务进行故障排除。

      【讨论】:

      • 感谢您的回复,日志显示的正是教程所说的“在localhost:8080 上运行”。当我登录到实际容器并检查正在运行的进程时,它似乎看起来正确: [root@21e727bc5a7d /]# netstat -tulpn 活动 Internet 连接(仅限服务器) Proto Recv-Q Send-Q 本地地址外部地址状态 PID/程序名称 tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1/node。是否有任何防火墙可能导致问题?
      【解决方案5】:

      点击给定命令以查找 docker-machine 的 IP 地址

      $ docker-machine ls
      

      输出将类似于 :

      NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
      default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.10.3
      

      现在以 身份从主机运行您的应用程序:

      $ curl -i 192.168.99.100:49160
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        • 2015-04-30
        相关资源
        最近更新 更多