为什么我无法在docker容器中访问我的node.js应用程序?

时间:2017-04-05 09:12:32

标签: node.js azure ubuntu docker

我在微软天蓝云(一个名为eva的node.js应用程序和应用程序使用的postgres-db)的ubuntu linux系统上运行两个容器:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
339b252e9895        eva                 "node app.js"            17 hours ago        Up 17 hours         0.0.0.0:8086->8086/tcp   eva
91a39d88c1eb        postgres            "/usr/lib/postgresql/"   19 hours ago        Up 19 hours         5432/tcp                 postgres

我在端口8086上公开了node.js应用程序并使用以下命令从映像启动容器:

sudo docker run --name eva -p 8086:8086 eva

我已经在azure控制台上打开了这个linux服务器的端口,并试图访问它,但chrome显示连接被拒绝错误。 我还尝试通过curl在本地访问它:

sudo curl --trace curl.out localhost:8086

这是curl.out:

== Info: Rebuilt URL to: localhost:8086/
== Info:   Trying 127.0.0.1...
== Info: Connected to localhost (127.0.0.1) port 8086 (#0)
=> Send header, 78 bytes (0x4e) 0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1.. 0010: 48 6f 73 74 3a 20 6c 6f 63 61 6c 68 6f 73 74 3a Host: localhost: 0020: 38 30 38 36 0d 0a 55 73 65 72 2d 41 67 65 6e 74 8086..User-Agent 0030: 3a 20 63 75 72 6c 2f 37 2e 34 37 2e 30 0d 0a 41 : curl/7.47.0..A 0040: 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 0d 0a       ccept: */*....
== Info: Recv failure: Connection reset by peer
== Info: Closing connection 0

我已经在我的MacOS上本地做了同样的工作。另外,我通过scp将源文件移动到linux系统来自己部署应用程序,并通过仅使用node命令在端口8085上运行应用程序;它也在起作用。

为什么我无法在ubuntu上的docker容器中访问我的node.js应用程序?

1 个答案:

答案 0 :(得分:0)

好吧,坦克给fernandezcuesta很多!

我能够通过使用您建议的命令找到答案。在运行docker exec -it eva ss -tnlp时,我意识到eva仍在侦听端口8085(由于该应用程序的另一个实例已经使用此端口,因此该实例实际上无法使用)。

在查看我的源代码的.env文件后,我意识到端口参数仍设置为8085.这导致node.js应用程序设置的http-server收听8085。

更改参数并再次部署应用后,我已经能够在端口8086上看到chrome中的应用。

我不知道为什么它会以这种方式在MacOS上运行,不过...... 但它现在可以在我的远程机器上运行,所以我很高兴:)

谢谢!