我想使用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
我还试图在主机上使用其他端口,结果相同。
你知道这里可能出什么问题吗?
答案 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进行进一步的探索。