Назад | Перейти на главную страницу

Получение 'ERR_CONNECTION_REFUSED' при попытке просмотра порта, сопоставленного с контейнером Docker

Я вытащил образ Docker:

$ docker pull ghost

И запускаем контейнер из образа:

$ docker run --name test-ghost -p 8080:2368 -d ghost
7d984e974f6a75fe18b3d397b5c8f0a428928a2be9df83f0d61a679aa5f537fc

Насколько я понимаю, -p switch сопоставит порт на хосте (8080) с портом внутри Docker (2368), чтобы я мог подключиться к веб-серверу, работающему в Docker, извне докера, то есть с моего хоста.

Однако, когда я пытаюсь перейти на любой из следующих адресов в Chrome с моего хоста:

http://localhost:8080/
http://0.0.0.0:8080/
http://127.0.0.1:8080/

Я получаю следующую ошибку:

This webpage is not available

ERR_CONNECTION_REFUSED

Похоже, это может быть проблема с подключением, а не проблема внутри контейнера, поскольку, когда я проверяю запущенные процессы внутри контейнера, кажется, что NodeJS запущен:

$ docker top test-ghost
UID          PID           PPID      ...  CMD
docker       4290          1028      ...  npm
docker       4324          4290      ...  sh -c node index
docker       4325          4324      ...  node index

Но похоже, что на порту 8080 ничего не прослушивается:

$ sudo lsof -n -i4TCP:8080 | grep LISTEN
$

Я также проверил, и мой брандмауэр MacOS отключен.


Я не ожидаю здесь полного решения, поскольку я знаю, что предоставленная мной информация минимальна.

Мне интересно, как бы можно было решить такую ​​проблему?

Похоже, порт Docker недоступен.

Есть ли способ узнать, почему сопоставление портов не сработало? Или какие порты являются подвергается воздействию Docker? Возможно, я отображаю неправильный внутренний порт?

Или есть какие-то другие общие предложения относительно того, что я здесь делаю неправильно?

Наконец разобрался, как заставить это работать!

Я запускаю Docker на MacOS и использую Docker QuickStart Terminal.

Оказывается, переход к 'localhost', '127.0.0.1' и т. Д. Был неправильным, потому что похоже, что Docker настраивает свой собственный хост:

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/


docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

Когда я использую 192.168.99.100, как указано выше, все работает нормально.

Чтобы узнать IP-адрес запущенного контейнера, вы можете использовать:

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

Начал играть с докером, и это первая проблема / проблема, с которой я столкнулся.

Похоже, что docker позволяет вам указать, используете ли вы порты в разных режимах, таких как - host, bridge (по умолчанию)

В режиме моста докер показывает вам сообщение после развертывания призрака - ваш блог теперь доступен на http: // локальный: 2368 / но посещение этого URL показывает отказ в соединении.

чтобы исправить это, вам нужно посетить настройки экземпляра в kitematic (проще, чем с помощью консоли). Перейдите на вкладку имя хоста / порты. Создайте сопоставление, как показано на изображении, от порта докера до порта хоста и бинго. теперь снова посетите URL-адрес, и все работает, как ожидалось.

Порт настроек экземпляра Kitematic

Если вы запустите докер с docker-machine используйте следующую команду, чтобы получить IP-адрес (при условии, что default ваше имя):

docker-machine ip default

Видеть: https://docs.docker.com/machine/reference/ip/