无法访问在Docker容器中运行的Node.js应用

时间:2019-09-28 08:18:20

标签: node.js docker docker-compose

我想使用docker-compose在docker容器中运行一个node.js应用程序。该应用程序是TiddlyWiki,还有其他容器,整个程序都在无所事事的VM中运行,并且使用ansible进行设置,但我认为对于此问题没有任何影响。

这是我的docker-compose配置:

        wiki:
          image: node:12-alpine
          container_name: nodejs
          restart: always
          working_dir: /home/node/app
          environment:
            NODE_ENV: production
          volumes:
            - "/srv/docker_wiki/:/home/node/app"
          ports:
            - "8080:8080"
          command: "node node_modules/tiddlywiki/tiddlywiki.js mywiki --listen debug-level=debug"

该应用似乎可以正常启动并运行:

vagrant@vserver:~$ sudo docker logs nodejs
Serving on http://127.0.0.1:8080
(press ctrl-C to exit)
syncer-server-filesystem: Dispatching 'save' task: $:/StoryList

但我无法达到它:

vagrant@vserver:~$ curl http://localhost:8080
curl: (52) Empty reply from server
vagrant@vserver:~$ curl http://localhost:8080
curl: (56) Recv failure: Connection reset by peer

似乎随机出现两个不同的错误消息中的一个。

一个有趣的细节:如果我使用curl附带的默认节点图像,那么实际上我可以在运行docker exec -it nodejs /bin/bash

之后从容器本身内部访问应用程序

我还试图在主机上使用其他端口,结果相同。

你知道这里可能出什么问题吗?

1 个答案:

答案 0 :(得分:2)

  

一个有趣的细节:如果我使用默认的节点图像   本身带有卷曲,那么实际上我可以从内部访问应用程序   运行docker exec -it nodejs / bin / bash

之后的容器本身

如果您能够访问容器内部,则意味着应用程序与127.0.0.1容器的本地主机绑定。

Serving on http://127.0.0.1:8080
(press ctrl-C to exit)

所有需要将其与0.0.0.0绑定。

因此将命令更改为

command: "node node_modules/tiddlywiki/tiddlywiki.js mywiki --host 0.0.0.0 --listen debug-level=debug"

command: "node node_modules/tiddlywiki/tiddlywiki.js mywiki --listen debug-level=debug host=0.0.0.0"

您在这里ListenCommand进行进一步的探索。