Запуск образа докера 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.

Другие вопросы по тегам