Docker-machine: не удается получить доступ к веб-серверу контейнера с хоста
Я только что установил Docker с Docker-Toolbox на своем Mac с помощью homebrew: установить докер с homebrew
После создания и настройки Контейнера с Rails, Postgres и начала создания докеры все выглядит нормально, но я не могу получить доступ к веб-серверу с хоста.
Вывод
$ docker-compose up
dummy_1 | I, [2016-03-30T14:55:53.130639 #6] INFO -- : listening on addr=0.0.0.0:8000 fd=10
Когда я ввожу в Google Chrome URL http://0.0.0.0:8000/, я получаю
This site can’t be reached
0.0.0.0 refused to connect.
ERR_CONNECTION_REFUSED
Итак, я попробовал
$ docker-machine env dummy
со следующим выходом:
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/choi/.docker/machine/machines/dummy"
export DOCKER_MACHINE_NAME="dummy"
Когда я пытаюсь в Chrome http://192.168.99.100:2376
, я получаю пустой загруженный файл. Почему это так? Я ожидаю страницу приветствия по умолчанию моего приложения Rails.
Ответы
Ответ 1
192.168.99.100
- это IP вашего хоста Docker в этом случае. Вам нужно открыть порт вашего контейнера, а затем вы сможете подключиться к нему из внешнего мира.
Я не знаком с Docker Compose, но журнал, который вы опубликовали, предлагает порт 8000. Поэтому попробуйте http://192.168.99.100:8000
.
(Причина http://192.168.99.100:2376
не работает, потому что это адрес и порт самого демона Docker, который не является HTTP-протоколом. Что касается 0.0.0.0
: это адрес, который прослушивает ваш веб-сервер внутри контейнера и приравнивается ко всем внешним соединениям в нем. Однако без каких-либо портов, в пути нет!)
Ответ 2
Для тех, кто попробовал localhost:4000
как сказано в учебнике, но не удалось:
введите это
$ docker-machine env
и получить результат как
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/choi/.docker/machine/machines/dummy"
export DOCKER_MACHINE_NAME="dummy"
так что вы получите IP: 192.168.99.100
затем посетите 192.168.99.100:4000
, как ip:your_port
Ответ 3
После просмотра порта вы можете получить доступ к веб-приложению по внутреннему IP-адресу, созданному докере. Вы можете получить IP-адрес, используя имя контейнера, запускающее команду:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' 'container name here'
Скажем, что вы получили IP 172.17.0.2
. Вы можете запустить open http://172.17.0.2:8000
Ответ 4
Вы можете найти правильный адрес для вызова своей страницы таким образом
Сначала найдите КОНТЕЙНЕР ID:
$ docker ps
Вы получите следующую информацию:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56dd4d582b08 abc01 "python app.py" 10 minutes ago Up 11 minutes 80/tcp, 0.0.0.0:80->4000/tcp flamboyant_bell
Теперь вы знаете порт: 4000. Чтобы адрес был таким:
http://192.168.99.100:4000/
Однако вы можете дважды проверить:
$ docker port 56dd4d582b08
В этом случае вы получите следующую информацию:
4000/tcp -> 0.0.0.0:80
Теперь вы можете попробовать посмотреть проект в
http://192.168.99.100:4000/
Ответ 5
Хотя это решение, похоже, работает, для меня не имеет особого смысла, почему оно работает таким образом. IP-адрес из окружения отсутствует даже в моей сети (и не совпадает с моим статическим IP-адресом ip v4 или адресом обратной связи localhost 127.0.0.1);
$ docker-machine env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
Стандарт (apache, jetty, tomcat и т.д.) - пересылка на локальный хост (127.0.0.1), почему Docker также не делает этого?
Ответ 6
Можете ли вы поделиться своим docker-compose yaml? Вам нужно добавить сонет, как показано ниже в разделе "порты", чтобы отобразить порт с локального хоста на контейнер
ports:
- "4001:8001"