Проблема в сетевом режиме.Быстрое решение - используйте --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