Wildfly dalam wadah Docker tidak memulai

10

Saya mencoba mengakses halaman pembuka Wildfly yang berjalan di wadah Docker di Windows 10 Pro. Inilah yang saya lakukan:

Menarik gambar:

docker pull jboss/wildfly

Jalankan wadah Wildfly (ini berfungsi dengan baik, di log Wildfly saya bisa melihatnya mulai dengan benar):

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

Temukan ID wadah:

docker ps

Periksa alamat IP:

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

Alamat IP-nya adalah 172.17.0.2, di browser saya pergi ke http://172.17.0.2:8080/ tetapi browser hang dan time out. Apa yang saya lewatkan?

MEMPERBARUI

Saya juga mencoba 127.0.0.1:8080dan tidak berhasil juga

UPDATE2

Log konsol:

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
sumber
Lihat jawaban stackoverflow.com/a/43762751/7873775 dan coba 10.0.75.1:8080 dan 10.0.75.2:8080.
Evgeniy Khyst
Maaf, tapi ini tidak berhasil. Saya memiliki docker dan browser yang berjalan di mesin Windows 10 yang sama. Bukankah 10.0.75.xalamat eksternal dan browser mencoba menemukannya di web?
ps0604
1
Oke, mari kita coba cari masalah. Silakan kirim hasil dari perintah CLI berikut: 1. docker --version, 2. docker run hello-world, 3. docker run --detach --publish 8080:80 --name webserver nginx, 4. kemudian coba untuk membuka localhost: 8080
Evgeniy Khyst
Silakan lihat pertanyaan yang diperbarui dengan log konsol. Saya mencoba localhost:8080dan gagal . docker psmenunjukkanCONTAINER 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 Saya menemukan artikel ini yang berbicara tentang jaringan buruh pelabuhan. Dikatakan bahwa server yang berjalan di dalam wadah harus mendengarkan semua antarmuka (bagian terakhir artikel), apakah ini berlaku?
ps0604

Jawaban:

3

Secara default, ketika Anda membuat sebuah wadah, itu tidak mempublikasikan port-portnya ke dunia luar. Jaringan 172.17.XX bersifat internal. Jika Anda perlu mengikat alamat IP untuk menjadi tuan rumah menjalankan ip docker dengan -p flag, seperti itu:

-p 8080: 8080

Peta port TCP 8080 dalam wadah ke port 8080 pada host Docker

Ivan Vovk
sumber
Mengapa contoh ini berfungsi jika port tidak dipublikasikan ke dunia luar?
ps0604
@Apakah Anda salah mengedit respons, jika Anda melihat pertanyaan itu persis apa yang saya lakukan.
ps0604
@ ps0604 terdengar seperti ada masalah jaringan. Dalam kasus Anda, periksa aturan firewall
Ivan Vovk
Jadi jawaban Anda salah?
ps0604
Jawaban saya benar, karena didasarkan pada rekomendasi dokumentasi.
Ivan Vovk
3

Dari: https://docs.docker.com/docker-for-windows/networking/

Port forwarding berfungsi untuk localhost; --publish, -p, atau -P semuanya berfungsi. Port yang diekspos dari Linux diteruskan ke host.

Jadi itu harus dapat diakses dari http: // localhost: 8080


Jika itu tidak berhasil, coba contoh windows

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

Yang seharusnya dapat diakses http: // localhost: 80

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


Jika itu gagal, coba:

docker-machine ip default

Dan gunakan http: // [buruh pelabuhan-mesin-ip]: 80

Tyhal
sumber
1
itu tidak berfungsi di localhost: 8080, maaf
ps0604
Bisakah Anda mencoba contoh yang saya posting di atas untuk melihat apakah itu masalah dengan JBoss / wildfly atau apakah itu jaringan windows Anda?
Tyhal
Dan jika nginx tidak berfungsi maka Anda dapat menjalankan 'docker-machine ip default' Dan coba gunakan IP di sana alih-alih localhost
Tyhal
0

Informasi kuncinya adalah Docker container in Windows 10 Pro- ini spesifikasi yang sangat umum tentang cara kerja Docker Anda di Windows. Mungkin ada banyak pilihan misalnya Docker for Windowsdengan / tanpa Linux containers,, Docker toolboxcontoh jarak jauh, ....

Umumnya wadah Docker pada Windows berjalan di beberapa jenis mesin virtual (Hyper-V, Virtualbox, ...), biasanya. Jadi ada lapisan jaringan tambahan, yang mungkin tidak dapat diakses langsung dari namespace jaringan Windows Anda. Tapi contoh terkait berjalan di mesin Linux, di mana lapisan jaringan tambahan ini tidak ada. Dan itulah alasan mengapa contoh copy / paste Linux tidak berfungsi pada Windows. Jadi jalankan kontainer seperti biasa dan biarkan port 8080:

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

Tetapi IP untuk akses akan berbeda dan IP kontainer tidak dapat digunakan, karena jaringan buruh pelabuhan internal sangat mungkin tidak dapat diakses dari Windows. Alih-alih mencoba menggunakan IP OS Windows Anda. Akhirnya, periksa dokumentasi Docker on Windowssolusi yang digunakan dan temukan IP mana yang digunakan untuk port yang terbuka.

Jika Anda memiliki keterampilan jaringan windows / linux yang maju, maka Anda dapat merutekan / meneruskan port dari namespace jaringan kontainer, melalui lapisan jaringan VM menengah ke lapisan jaringan Windows. Tapi itu bisa sangat rumit.

Jan Garaj
sumber
Jan, saya menginstal Docker Desktop untuk Windows , mengunduh gambar dan menjalankan wadah Wildfly seperti dijelaskan dalam tutorial di atas. Di konsol saya melihat bahwa itu dimulai dengan baik, dan 8080:8080itu yang secara teori seharusnya bekerja, tetapi tidak. Saya tidak tahu tentang jaringan, di mana saya harus mulai mencari?
ps0604
@ ps0604 Jika Anda ingin mengikuti tutorial Linux secara membabi buta, maka gunakan Linux. Seperti yang saya sebutkan doc adalah teman Anda - docs.docker.com/docker-for-windows/networking ada yang disebutkan secara eksplisit There 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.. Harap atasi batasan itu.
Jan Garaj
0

Saya memiliki rekan kerja di sistem windows yang menghadapi masalah yang sama. Dia berusaha keras untuk itu dan tidak bisa ke mana-mana. Ada banyak hal aneh yang terjadi dengan Docker Desktop untuk windows. Kami akhirnya hanya menginstal subsistem linux untuk windows dan menginstal buruh pelabuhan di sana dan itu bekerja seperti pesona baginya sejak saat itu. Jika Anda ingin tetap menggunakan windows dan Anda tidak keberatan bekerja pada subsistem linux, saya sarankan Anda turun rute itu. Kami melangkah lebih jauh dari yang disarankan Jan Garaj dan hanya menganggapnya sebagai pemborosan waktu. Docker Desktop untuk Windows dimaksudkan untuk menjadi env di mana Anda benar-benar bekerja di dalamnya - menggunakan wadah dev dll. Host-Container hal yang merepotkan.

Sam Thomas
sumber
Ya, saya setuju, saya akan membuat wadah di Ubuntu, bukan Windows, saya tidak punya masalah di sana. Satu-satunya hal yang saya kembangkan di Windows, jadi saya harus menguji tiga kali, sekali di windows sambil mengembangkan, kemudian di wadah linux, dan akhirnya ketika saya mengunggah wadah ke cloud. Jika saya dapat menjalankan wadah di Windows, maka saya akan menguji hanya dua kali.
ps0604
itulah sebabnya saya menyarankan subsistem linux .. Anda sebenarnya tidak harus mengubah konteks 3 kali ,, mungkin 2-2,5 kali;)
Sam Thomas