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і це теж не працює

ОНОВЛЕННЯ2

Журнал консолі:

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

Дивіться відповідь stackoverflow.com/a/43762751/7873775 і спробувати 10.0.75.1:8080 і 10.0.75.2:8080.
Євгеній Хист

Вибачте, але це не спрацювало. У мене і докер, і браузер працюють на одній машині Windows 10. 10.0.75.xЦе не зовнішня адреса, і браузер намагається знайти її в Інтернеті?
ps0604

1
Гаразд, спробуємо знайти проблему. Будь ласка, опублікуйте результати наступних команд CLI: 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; - опублікувати, -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


1
це не працює у localhost: 8080, вибачте
ps0604

Чи можете ви спробувати на прикладі, який я розмістив вище, щоб побачити, чи це проблема з jboss / wildfly чи чи ваша мережа Windows?
Тихал

І якщо nginx не працює, ви можете запустити 'docker-machine ip default' та спробувати використовувати IP там замість localhost
Tyhal

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, то ви можете якось маршрутизувати / переправляти порт з простору імен контейнерної мережі через проміжний мережевий рівень VM до мережевого рівня Windows. Але це може бути досить складно.


Ян, я встановив Docker Desktop для Windows , завантажив зображення та запустив контейнер Wildfly, як пояснено у підручнику вище. У консолі я бачу, що вона починається нормально, і 8080:8080це те, що в теорії має працювати, але це не так. Я не знаю про мережу, з чого мені почати шукати?
ps0604

@ ps0604 Якщо ви хочете сліпо слідувати підручнику Linux, тоді використовуйте Linux. Як я вже згадував, ваш доктор є другом - там чітко згадується 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 та встановили там докер, і відтоді вона працювала як шарм для нього. Якщо ви хочете дотримуватися вікон і не проти зайнятися роботою над підсистемою linux, я пропоную вам спуститися за цим маршрутом. Ми пішли далі, ніж те, що запропонував Ян Гарадж, і просто виявили, що це марна трата часу. Докер робочий стіл для Windows призначений для перешкод, де ви повністю працюєте в ньому - використовуючи контейнери для розробників тощо.


Так, я погоджуюся, я буду створю контейнери в Ubuntu замість Windows, у мене немає проблем. Єдине, що я розробляю в Windows, тому мені довелося б перевірити три рази, раз у Windows під час розробки, потім у контейнер linux та нарешті, коли я завантажую контейнер у хмару. Якщо я можу запустити контейнер у Windows, я б протестував лише два рази.
ps0604

саме тому я запропонував підсистему linux .. вам насправді не потрібно міняти контекст 3 рази, можливо, 2-2,5 рази;)
Сем Томас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.