Wildfly ในคอนเทนเนอร์ Docker ไม่เริ่มทำงาน


10

ฉันพยายามเข้าถึงหน้ายินดีต้อนรับของ Wildfly ที่ทำงานอยู่ใน Docker container ใน Windows 10 Pro นี่คือสิ่งที่ฉันทำ:

ดึงภาพ:

docker pull jboss/wildfly

เรียกใช้คอนเทนเนอร์ Wildfly (ใช้งานได้ดีในบันทึก Wildfly ฉันสามารถดูได้เริ่มอย่างถูกต้อง):

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

ค้นหา ID คอนเทนเนอร์:

docker ps

ตรวจสอบที่อยู่ IP:

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

ที่อยู่ IP คือ172.17.0.2ในเบราว์เซอร์ฉันไปที่http://172.17.0.2:8080/แต่เบราว์เซอร์หยุดทำงานและหมดเวลา ฉันกำลังคิดถึงอะไร

UPDATE

ฉันลองด้วย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

ดูคำตอบstackoverflow.com/a/43762751/7873775และลอง 10.0.75.1:8080 และ 10.0.75.2:8080
Evgeniy Khyst

ขออภัย แต่มันใช้งานไม่ได้ ฉันมีทั้งนักเทียบท่าและเบราว์เซอร์ที่ทำงานบนเครื่อง 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
Evgeniy Khyst

โปรดดูคำถามที่อัพเดตด้วยบันทึกของคอนโซล ฉันพยายาม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 docker container ด้วยแฟล็ก -p เช่นนั้น:

-p 8080: 8080

แม็พพอร์ต TCP 8080 ในคอนเทนเนอร์เข้ากับพอร์ต 8080 บนโฮสต์ Docker


ทำไมตัวอย่างนี้ใช้งานได้หากพอร์ตไม่ได้ถูกเผยแพร่ไปยังโลกภายนอก
ps0604

@ คุณจะแก้ไขการตอบกลับอย่างไม่ถูกต้องหากคุณดูคำถามมันเป็นสิ่งที่ฉันทำ
ps0604

@ ps0604 ดูเหมือนว่ามีปัญหาเครือข่าย ในกรณีของคุณตรวจสอบกฎไฟร์วอลล์
Ivan Vovk

ดังนั้นคำตอบของคุณไม่ถูกต้อง?
ps0604

คำตอบของฉันถูกต้องเพราะมันขึ้นอยู่กับการแนะนำเอกสาร
Ivan Vovk

3

จาก: https://docs.docker.com/docker-for-windows/networking/

การส่งต่อพอร์ตทำงานได้กับ localhost - เผยแพร่, -p หรือ -P ทำงานทั้งหมด พอร์ตที่เปิดเผยจาก Linux จะถูกส่งต่อไปยังโฮสต์

ดังนั้นจึงควรเข้าถึงได้จากhttp: // localhost: 8080


หากไม่ได้ผลให้ลองใช้ตัวอย่างหน้าต่าง

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 ของคุณหรือไม่?
Tyhal

และถ้า Nginx ไม่ทำงานแล้วคุณสามารถเรียกใช้ 'นักเทียบท่าเครื่องเริ่มต้น IP' และพยายามใช้ IP ที่มีแทน localhost
Tyhal

0

ข้อมูลสำคัญคือDocker container in Windows 10 Pro- นี่เป็นข้อมูลจำเพาะทั่วไปที่นักเทียบท่าของคุณใช้งานบน Windows มีตัวเลือกมากมายเช่นDocker for Windowsมี / ไม่มีLinux containers,, Docker toolboxอินสแตนซ์ระยะไกล, ....

โดยทั่วไปแล้วนักเทียบท่าใน Windows จะใช้งานเครื่องเสมือนบางประเภท (Hyper-V, Virtualbox, ... ) โดยปกติ ดังนั้นจึงมีเลเยอร์เครือข่ายเพิ่มเติมซึ่งอาจไม่สามารถเข้าถึงได้โดยตรงจากเนมสเปซเครือข่าย Windows ของคุณ แต่ตัวอย่างที่เชื่อมโยงทำงานบนเครื่อง Linux โดยที่ไม่มีเลเยอร์เครือข่ายเพิ่มเติมนี้อยู่ และนี่คือเหตุผลว่าทำไมตัวอย่างการคัดลอก / วาง Linux ไม่ทำงานบน Windows ดังนั้นให้เรียกใช้ container ตามปกติและแสดง port 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 ที่ผมกล่าวถึง 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.มีกล่าวไว้อย่างชัดเจน โปรดจัดการกับข้อ จำกัด นั้น
Jan Garaj

0

ฉันมีเพื่อนทำงานบนระบบ windows ที่ประสบปัญหาเดียวกัน เขาใช้ความพยายามอย่างมากและไม่สามารถไปไหนมาไหนได้ มีสิ่งแปลก ๆ มากมายที่เกิดขึ้นกับ Docker Desktop สำหรับหน้าต่างที่ดูเหมือนว่า ในที่สุดเราก็เพิ่งติดตั้งระบบย่อย linux สำหรับ windows และติดตั้ง docker ไว้ที่นั่นและมันก็ทำงานได้อย่างมีเสน่ห์สำหรับเขาหลังจากนั้น หากคุณต้องการติดกับ windows และคุณไม่สนใจที่จะทำงานกับระบบย่อย linux ฉันขอแนะนำให้คุณไปตามเส้นทางนั้น เราไปไกลกว่าสิ่งที่แจนการาจแนะนำและเพิ่งพบว่าเป็นการเสียเวลา นักเทียบท่าเดสก์ท็อปสำหรับ Windows นั้นหมายถึงว่าเป็น env ที่คุณทำงานภายในอย่างสมบูรณ์โดยใช้คอนเทนเนอร์ dev และอื่น ๆ สิ่งที่ Host-Container เป็นสิ่งที่เจ็บปวดสำหรับมัน


ใช่ฉันเห็นด้วยฉันจะสร้างตู้คอนเทนเนอร์ใน Ubuntu แทน Windows ฉันไม่มีปัญหา สิ่งเดียวคือฉันพัฒนาใน Windows ดังนั้นฉันจะต้องทดสอบสามครั้งครั้งหนึ่งในหน้าต่างในขณะที่การพัฒนาจากนั้นในภาชนะลินุกซ์และในที่สุดเมื่อฉันอัปโหลดภาชนะไปยังระบบคลาวด์ หากฉันสามารถเรียกใช้คอนเทนเนอร์ใน Windows ได้ฉันจะทดสอบสองครั้งเท่านั้น
ps0604

ซึ่งเป็นเหตุผลที่ผมแนะนำระบบย่อยลินุกซ์ .. คุณไม่จริงต้องบริบทการเปลี่ยนแปลงครั้งที่ 3 ,, บางที 2-2.5 ครั้ง;)
แซมโทมัส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.