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"