Запуск образа докера sourcegraph на 0.0.0.0 вместо 127.0.0.1
Я пытаюсь запустить службу sourcegraph на удаленной машине. Инструкция по запуску sourcegraph дана как
https://about.sourcegraph.com/docs/server
docker run \
--publish 7080:7080 --rm \
--volume /tmp/sourcegraph/config:/etc/sourcegraph \
--volume /tmp/sourcegraph/data:/var/opt/sourcegraph \
sourcegraph/server:2.3.11
Это запускает sourcegraph на 127.0.0.1
Я хочу бежать в 0.0.0.0
так что я могу получить доступ к службе с удаленных машин.
Попытка этого не работает.
docker run --publish 0.0.0.0:7080:7080 ...
Там написано, что служба работает на
Sourcegraph is now running at http://localhost:7080
Какие-либо предложения? Может ли это быть проблемой sourcegraph?
1 ответ
--publish 7080:7080
Эта опция заставляет docker прослушивать все интерфейсы хоста и пересылать трафик от порта 7080 хоста к порту 7080 контейнера. Чтобы это работало, контейнер должен прослушивать все интерфейсы внутри своего пространства имен сети (docker не может общаться с интерфейсом обратной связи внутри контейнера пространство имен сети).
Sourcegraph is now running at http://localhost:7080
На самом деле это вводящее в заблуждение сообщение из вашего приложения (оно не исходит от самого докера). Тестирование этого изображения с помощью netshoot показывает, что контейнер прослушивает все интерфейсы:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
687f9749d99c sourcegraph/server:2.3.11 "/sbin/tini -- /usr/…" 43 minutes ago Up 43 minutes keen_torvalds
...
$ docker run -it --rm --net container:687f9749d99c nicolaka/netshoot /bin/sh
/ # netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:5005 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3700 0.0.0.0:* LISTEN
tcp 0 0 :::7080 :::* LISTEN
tcp 0 0 :::3178 :::* LISTEN
tcp 0 0 :::3179 :::* LISTEN
tcp 0 0 :::6379 :::* LISTEN
tcp 0 0 :::6060 :::* LISTEN
tcp 0 0 :::3180 :::* LISTEN
tcp 0 0 :::3181 :::* LISTEN
tcp 0 0 :::3090 :::* LISTEN
Обратите внимание :::7080
строка показывает, что контейнер прослушивает этот порт на всех интерфейсах. Пока ваша сеть это позволяет, вы должны иметь возможность связаться с вашим контейнером, указав IP-адрес хоста, порт 7080.