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

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

Я извлек образ Docker:

$ docker pull ghost

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

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

Насколько я понимаю, коммутатор -pсопоставит порт на хосте (8080) с портом внутри Docker (2368), чтобы я мог подключиться к веб-серверу, работающему в Docker, извне 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? Возможно, я указываю не тот внутренний порт?

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

решение1

Наконец-то понял, как это сделать!

Я запускаю 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то, что указано выше, все работает нормально.

решение2

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

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

решение3

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

docker-machine ip default

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

решение4

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

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

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

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

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

Связанный контент