Я вытащил образ 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-адрес, и все работает, как ожидалось.
Если вы запустите докер с docker-machine
используйте следующую команду, чтобы получить IP-адрес (при условии, что default
ваше имя):
docker-machine ip default