Docker: не может получить доступ к контейнеру докеров (Jupyter Data Science) с данным IP-адресом / токеном?Почему порт не так? - PullRequest
0 голосов
/ 26 декабря 2018

Я смонтировал докер-контейнер Jupiter / Data Science с помощью этой команды: docker run -p 7777:8888 --name DataS jupyter/datascience-notebook

Я получаю такой ответ:

Скопируйте / вставьте этот URL-адрес в браузер при подключенииВпервые войти в систему с помощью токена: http://(c623e69fe641 или 127.0.0.1): 8888 /? token = 0bf2a07b1dcd957f616e73941f5dc5dba4cd01d5341b21fd

В Kinematik я получаю ту же информацию.1013 * Но когда я подключаю адрес в браузере, 127.0.0.1:8888 oder :7777, я всегда получаю сообщение об ошибке, что браузер не может установить соединение.(Я пробовал несколько браузеров)

Второй момент заключается в том, что я думал, что получаю локальный порт 7777 через эту опцию -p 7777:8888.Почему я всегда продолжаю получать 8888 в качестве локального порта?Я также попробовал -p 8800:7777, но он дал мне те же результаты :-(

Причина, по которой я хочу это изменить, заключается в том, что мой локальный веб-сервер apache работает на этом порту.

Что я делаю не так? (Относительно доступа и сопоставления портов)

Спасибо.

1 Ответ

0 голосов
/ 26 декабря 2018

Проблема в сетевом режиме.Быстрое решение - используйте --network=host.В этом сценарии вам не нужна переадресация портов, ни IP-адреса, ни имена хостов - Docker-контейнер просто использует хост-сеть:

docker run --network=host --name DataS jupyter/datascience-notebook

Затем подключитесь с помощью localhost:

http://localhost:8888

Недостатком host сетевого режима является отсутствие изоляции контейнера, которая в вашем случае, вероятно, не нужна.

Глубоко, что происходит в вашем случае:

  • Ваш сервис начинается в контейнере, открывается порт 8888.Но он не знает, что он находится внутри контейнера, поэтому он просит вас подключиться, используя http://localhost:8888.на самом деле это будет работать, но только изнутри контейнера.

  • на вашем компьютере HOST вы сопоставите порт контейнера 8888 с 7777, но вы не можетеиспользуйте localhost, как только вам нужно будет указать IP-адрес вашего контейнера или имя хоста.

Если вы не хотите использовать host сеть из-за проблем безопасности или конфликтов портов, просто подключитесь с помощьюIP-адрес контейнера.Запустить контейнер:

docker run -p 7777:8888 --name DataS jupyter/datascience-notebook

Получить IP-адрес контейнера:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' DataS

Подключиться к http://[container ip]:7777

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...