Приложение Node.js, запущенное в Docker-контейнере, недоступно - PullRequest
0 голосов
/ 28 сентября 2019

Я хочу запустить приложение node.js в контейнере Docker, используя docker-compose.Приложение TiddlyWiki, есть другие контейнеры, и все это работает в бродячей виртуальной машине и настроено с ansible, но я не думаю, что что-то из этого имеет значение для этой проблемы.

Это мой докер-compose config:

        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, то после запуска * 1014 я могу получить доступ к приложению изнутри самого контейнера.*

Я также пытался использовать другой порт на хосте с тем же результатом.

Есть идеи, что здесь может пойти не так?

1 Ответ

2 голосов
/ 28 сентября 2019

Интересная деталь: если я использую образ узла по умолчанию, который поставляется вместе с curl, то я могу фактически получить доступ к приложению из самого контейнера после запуска 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 .

...