Wildfly в Docker контейнере не запускается

10

Я пытаюсь получить доступ к странице приветствия Wildfly, работающей на контейнере Docker в Windows 10 Pro. Вот что я сделал:

Вытащил изображение:

docker pull jboss/wildfly

Запустите контейнер Wildfly (это работает нормально, в журнале Wildfly я вижу, что он запущен правильно):

docker run -it -p 8080:8080 jboss/wildfly

Найдите идентификатор контейнера:

docker ps

Проверьте IP-адрес:

docker inspect -f "{{ .NetworkSettings.IPAddress }}" cac63ed21d78

IP-адрес есть 172.17.0.2, в браузере я захожу на http://172.17.0.2:8080/, но браузер зависает и время ожидания. Что мне не хватает?

ОБНОВИТЬ

Я тоже пытался с, 127.0.0.1:8080и это тоже не работает

UPDATE2

Консольный журнал:

docker --version

#Docker version 19.03.1, build 74b1e89e8a

docker run hello-world

#Hello from Docker!

docker run --detach --publish 8080:80 --name webserver nginx

#Unable to find image 'nginx:latest' locally
#latest: Pulling from library/nginx
#8ec398bc0356: Pull complete
#465560073b6f: Pull complete
#f473f9fd0a8c: Pull complete
#Digest:  sha256:b2d89d0a210398b4d1120b3e3a7672c16a4ba09c2c4a0395f18b9f7999b768f2
#Status: Downloaded newer image for nginx:latest
#c5cdb6de11240b5fe33bc424779721e1b44948797fd6ff389004d0766b71dd17

docker ps

#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 
#nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
ps0604
источник
См. Ответ stackoverflow.com/a/43762751/7873775 и попробуйте 10.0.75.1:8080 и 10.0.75.2:8080.
Евгений Хыст
Извините, но это не сработало. У меня есть и докер, и браузер, работающий на одном компьютере с Windows 10. Не 10.0.75.xвнешний адрес, и браузер пытается найти его в Интернете?
ps0604
1
Хорошо, давайте попробуем найти проблему. Пожалуйста, опубликуйте результаты следующих команд консоли: 1. docker --version, 2. docker run hello-world, 3. docker run --detach --publish 8080:80 --name webserver nginx, 4. затем попробуйте открыть localhost: 8080
Евгений Хист
Пожалуйста, смотрите вопрос обновляется в журнале консоли. Я пытался, localhost:8080и это время ожидания. docker psпоказываетCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
ps0604
@Evgeniy Khyst Я нашел эту статью, в которой рассказывается о работе с докерами. В нем говорится, что сервер, работающий внутри контейнера, должен прослушивать все интерфейсы (последняя часть статьи), это применимо?
ps0604

Ответы:

3

По умолчанию при создании контейнера он не публикует свои порты во внешнем мире. Сеть 172.17.XX является внутренней. Если вам нужно привязать IP-адрес к контейнеру ip run хоста с флагом -p, вот так:

-p 8080: 8080

Сопоставьте TCP-порт 8080 в контейнере с портом 8080 на хосте Docker

Иван Вовк
источник
Почему этот пример работает, если порты не публикуются во внешнем мире?
ps0604
@ Будете ли вы неправильно редактировать ответ, если вы посмотрите на вопрос, это именно то, что я делал.
ps0604
@ ps0604 похоже на проблему с сетью. В вашем случае проверьте правила брандмауэра
Иван Вовк
Таким образом, ваш ответ был неверным?
ps0604
Мой ответ правильный, потому что основан на рекомендациях по документации.
Иван Вовк
3

От: https://docs.docker.com/docker-for-windows/networking/

Переадресация портов работает для localhost; --publish, -p или -P все работают. Порты, предоставляемые Linux, перенаправляются на хост.

Так что он должен быть доступен с http: // localhost: 8080


Если это не сработает, попробуйте пример Windows

docker run -d -p 80:80 --name webserver nginx

Который должен быть доступен http: // localhost: 80

https://docs.docker.com/docker-for-windows/index#explore-the-application-and-run-examples


Если даже это не помогло, попробуйте:

docker-machine ip default

И используйте http: // [docker-machine-ip]: 80

Tyhal
источник
1
это не работает в localhost: 8080, извините
ps0604
Не могли бы вы попробовать приведенный выше пример, чтобы увидеть, если это проблема с jboss / wildfly или ваша сеть Windows?
Тихал
А если nginx не работает, тогда вы можете запустить 'docker-machine ip default' и попробовать использовать там IP вместо localhost
Тихал
0

Ключевая информация Docker container in Windows 10 Pro- это очень общая спецификация того, как работает ваш Docker в Windows. Там может быть много вариантов , например , Docker for Windowsс / без Linux containers, Docker toolboxудаленный экземпляр, ....

Как правило, контейнеры Docker в Windows обычно работают на какой-то виртуальной машине (Hyper-V, Virtualbox, ...). Таким образом, существует дополнительный сетевой уровень, который может быть недоступен непосредственно из сетевого пространства имен Windows. Но связанный пример работает на Linux-машине, где этот дополнительный сетевой уровень не существует. И это причина, почему пример копирования / вставки Linux не работает в Windows. Так что запустите контейнер как обычно и выставьте порт 8080:

docker run -it -p 8080:8080 jboss/wildfly

Но IP-адрес для доступа будет другим, и IP-адрес контейнера нельзя использовать, потому что эта внутренняя докерная сеть, скорее всего, недоступна из Windows. Скорее попробуйте использовать IP вашей ОС Windows. В конце концов, проверьте документацию используемого Docker on Windowsрешения и найдите, какой IP используется для открытых портов.

Если у вас есть продвинутые навыки работы с сетью Windows / Linux, вы можете каким-то образом маршрутизировать / переадресовывать порт из пространства имен контейнерной сети через промежуточный сетевой уровень виртуальной машины на сетевой уровень Windows. Но это может быть довольно сложно.

Ян Гарадж
источник
Ян, я установил Docker Desktop для Windows , загрузил образ и запустил контейнер Wildfly, как описано в руководстве выше. В консоли я вижу, что все начинается нормально, и это 8080:8080то, что в теории должно работать, но это не так. Я не знаю о сети, с чего мне начать искать?
ps0604
@ ps0604 Если вы хотите слепо следовать руководству по Linux, используйте Linux. Как я уже говорил, doc - ваш друг - там явно упоминается docs.docker.com/docker-for-windows/networkingThere is no docker0 bridge on Windows: Because of the way networking is implemented in Docker Desktop for Windows, you cannot see a docker0 interface on the host. This interface is actually within the virtual machine. . Пожалуйста, разберитесь с этим ограничением.
Ян Гарадж
0

У меня был коллега, работающий в системе Windows, которая столкнулась с той же проблемой. Он приложил много усилий и просто не мог никуда добраться. Кажется, с Docker Desktop для Windows происходит много странных вещей. Мы наконец-то просто установили подсистему Linux для Windows и установили там докер, и с тех пор это работало для него как прелесть. Если вы хотите придерживаться Windows, и вы не против работать с подсистемой Linux, я предлагаю вам пойти по этому пути. Мы пошли дальше, чем предлагал Ян Гарадж, и обнаружили, что это пустая трата времени. Docker Desktop для Windows призван стать средой, в которой вы полностью работаете с ней - с помощью контейнеров разработчика и т. Д. Хозяин-контейнер - это проблема.

Сэм Томас
источник
Да, я согласен, я буду создавать контейнеры в Ubuntu вместо Windows, у меня нет проблем там. Единственное, что я разрабатываю в Windows, так что мне придется тестировать три раза, один раз в Windows во время разработки, затем в контейнере Linux и, наконец, когда я загружаю контейнер в облако. Если бы я мог запустить контейнер в Windows, то я бы протестировал только дважды.
ps0604
вот почему я предложил подсистему Linux .. вам на самом деле не нужно менять контекст 3 раза, может быть, 2-2,5 раза;)
Сэм Томас