Cara mendapatkan alamat IP dari menjalankan container docker

Jawaban:

116

Jika Anda tidak ingin memetakan port dari host Anda ke container, Anda dapat mengakses langsung ke ip kisaran docker untuk container. Rentang ini secara default hanya diakses dari host Anda. Anda dapat memeriksa data jaringan container Anda dengan melakukan:

docker inspect <containerNameOrId>

Mungkin lebih baik untuk memfilter:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

Biasanya, kisaran ip buruh pelabuhan default adalah 172.17.0.0/16. Host Anda harus 172.17.0.1dan penampung pertama Anda harus 172.17.0.2jika semuanya normal dan Anda tidak menentukan opsi jaringan khusus.

EDIT Cara lain yang lebih elegan menggunakan fitur buruh pelabuhan daripada "bash tricking":

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
OscarAkaElvis
sumber
7
Anda berbicara tentang IP internal, dan itu tidak ada hubungannya dengan pertanyaan yang ada. Jawaban Anda hanya membingungkan pembaca. Karena IP adalah IP mesin tempat Docker dijalankan. Yang mana saja localhost:)
David Gatti
Anda salah. OP tidak menentukan apa-apa tentang layanan mikro harus dapat diakses dari luar. Dia hanya mengatakan "uji layanan mikro node melalui browser" dan ini dapat dilakukan dengan metode yang saya usulkan menggunakan http://172.17.0.2:anyPortdari host. Tentu saja jika Anda ingin mengaksesnya menggunakan localhost di host, Anda harus memetakan port. Akan melihat apa yang diinginkan OP.
OscarAkaElvis
3
Anda mengatakan bahwa Anda dapat mengakses IP internal di dalam Container dari host? Itu tidak mungkin secara fisik, itu adalah jaringan yang sama sekali berbeda. Tidak hanya saya baru saja memeriksa dan ya, saya tidak dapat mengakses 172.17.0.7 dari kontainer buruh pelabuhan saya, maka saya harus dapat melihat semua pesaing buruh pelabuhan jika saya memindai mesin host saya dengan pemindai jaringan, dan ini tidak terjadi lagi. Saya tahu bahwa itu seharusnya tidak berhasil, saya menguji apa yang Anda katakan (Anda tidak pernah tahu) dan itu tidak berhasil. Jadi mungkin penjelasan Anda kehilangan bagian penting?
David Gatti
Kontainer dapat diakses dari tuan rumah. Cobalah sendiri ... Saya akan memberi Anda beberapa petunjuk. 1. Unduh run container: docker run --name struts --rm -i tomcat2. Dapatkan ip container Anda (jika Anda hanya memiliki satu): docker inspect struts | grep '"IPAddress"' | head -n 13. Buka di browser host http://x.x.x.x:8080. Anda dapat melihat halaman default Apache Tomcat.
OscarAkaElvis
1
Saya tidak dapat mengakses aplikasi web di kontainer tanpa memetakan port menggunakan -p
bilal.haider
22

Gunakan --formatopsi untuk hanya mendapatkan alamat IP, bukan seluruh info penampung:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Nilesh Patel
sumber
4
Di windows host gunakan tanda kutip ganda, bukan tanda kutip tunggal. Misalnya sudo docker inspect --format "{{.NetworkSettings.IPAddress}}" <CONTAINER ID or NAME> Referensi: tautan
Vineet Sajwan
1
format baru info tentang wadah di sini
Igor
20

Untuk mesin buruh pelabuhan modern gunakan perintah ini:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

dan untuk mesin yang lebih tua digunakan:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
Nima Ghoroubi
sumber
Seperti yang disebutkan dan ditautkan dalam komentar oleh @sanyash di area OP asli.
Jesse Chisholm
Kesalahan penguraian template: template:: 1: tindakan tak terduga yang tidak
ditutup
11

jika Anda ingin mendapatkannya langsung di dalam wadah, Anda dapat mencobanya

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
Ilya Yevlampiev
sumber
5

Anda dapat memulai wadah Anda dengan bendera -P . Ini "menetapkan" port acak ke port gambar Anda yang terbuka.

Dengan docker port <container id>Anda dapat melihat port yang dipilih secara acak. Akses kemudian dimungkinkan melalui localhost:port.

gScht
sumber
-3

Anda tidak dapat mengakses IP buruh pelabuhan dari luar mesin host itu. Jika browser Anda berada di komputer lain, lebih baik memetakan port host ke port container dengan meneruskan -p 8080:8080perintah untuk menjalankan.

Meneruskan -pAnda dapat memetakan port host ke port kontainer dan proxy disetel untuk meneruskan semua lalu lintas untuk port host tersebut ke port kontainer yang ditunjuk.

Akash Sharma
sumber