Apakah ada perintah yang bisa saya jalankan untuk mendapatkan alamat IP penampung langsung dari host setelah wadah baru dibuat?
Pada dasarnya, setelah Docker membuat wadah, saya ingin menggulirkan penerapan kode saya sendiri dan skrip konfigurasi wadah.
Jawaban:
The
--format
pilihan untukinspect
datang untuk menyelamatkan.Sintaks klien Docker modern adalah:
Sintaks klien Docker lama adalah:
Perintah-perintah ini akan mengembalikan alamat IP penampung Docker.
Seperti disebutkan dalam komentar: jika Anda menggunakan Windows, gunakan tanda kutip ganda
"
sebagai ganti tanda kutip tunggal di'
sekitar kurung kurawal.sumber
<no value>
respons di Mac menggunakan Fig / Boot2Docker<no value>
jika Anda mencoba menjalankan ini terhadap sebuah wadah yang tidak berjalan. Pastikan wadah Anda berjalan sebelum Anda melakukan ini.{{ .NetworkSettings.Networks.$network.IPAddress }}
. Standarnya tampaknya menjembatani, tetapi di bawah susunan buruh pelabuhan ini akan menjadi nama spesifik yang tergantung pada nama aplikasi Anda (saya pikir dari flag --project-name, meskipun itu juga akan tergantung pada jenis konfigurasi jaringan apa Anda telah mengatur). Saya menulis jawaban lengkap dalam jawaban di sini stackoverflow.com/questions/17157721/…Kamu bisa menggunakan
docker inspect <container id>
.Sebagai contoh:
sumber
docker inspect $CID | grep IPAddress | cut -d '"' -f 4
, ini berfungsi dengan baik :)alias dockerip='docker ps | tail -n +2 | while read cid b; do echo -n "$cid\t"; docker inspect $cid | grep IPAddress | cut -d \" -f 4; done'
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
adalah sintaks baru.-format
sudah ditinggalkan, itu menjadi--format
.Pertama-tama dapatkan ID kontainer:
(Kolom pertama untuk ID wadah)
Gunakan ID kontainer untuk menjalankan:
Di bagian bawah, di bawah "NetworkSettings", Anda dapat menemukan "IPAddress"
Atau Lakukan saja:
sumber
docker run -it MYCONTAINER /bin/bash
), output dariinspect
tidak memiliki bagianNetworkSettings
!docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
... | grep IP
solusi untuk semua detail format yang diperlukan untuk mendapatkan IP. +1docker run -it MYIMAGE
(itu bukan nama wadah ); jika Anda melakukannya,docker inspect MYIMAGE
Anda akan mendapatkan informasi statis tentang gambar . Anda perlu menemukan nama wadah yang sedang berjalan (atau menggunakan idnya seperti yang disarankan orang lain). Di sistem saya, wadah pertama yang dibuat dari gambar itu default untuk namaMYIMAGE_1
, begitudocker inspect MYIMAGE_1
juga NetworkSettings.Anda dapat menambah
-i
grep untuk mengabaikan kasing kemudian bahkan yang berikut ini akan berfungsi:sumber
Untuk mendapatkan semua nama kontainer dan alamat IP mereka hanya dalam satu perintah.
Jika Anda menggunakan
docker-compose
perintah akan seperti ini:Outputnya adalah:
sumber
{{.NetworkSettings.IPAddress }}
menjadi{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'
. Thesed(1)
Menghapus baris kosong untuk wadah ini, tetapi tidak memiliki alamat IP.Tambahkan skrip shell ini di
~/.bashrc
file Anda atau yang relevan:Kemudian, untuk mendapatkan alamat IP suatu wadah, cukup lakukan ini:
Untuk versi baru Docker, silakan gunakan yang berikut ini:
sumber
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
source ~/.bash_profile
Tampilkan semua alamat IP penampung:
sumber
Di Docker 1.3+, Anda juga dapat memeriksanya menggunakan:
Masukkan Docker yang berjalan (Linux):
Untuk windows:
sumber
docker exec [container-name-or-id] ip a
docker exec [container-id or container-name] ipconfig
Pada Docker versi 1.10.3, build 20f81dd
Kecuali Anda memberi tahu Docker sebaliknya, Docker selalu meluncurkan wadah Anda di jaringan jembatan. Jadi, Anda dapat mencoba perintah ini di bawah:
Yang kemudian akan mengembalikan bagian Wadah yang akan menampilkan alamat IP untuk wadah yang berjalan.
sumber
Menjalankan:
Ini akan menampilkan gambar buruh pelabuhan aktif:
Gunakan nilai ID KONTAINER:
"172.17.0.2"
sumber
Berdasarkan beberapa jawaban yang saya sukai, saya memutuskan untuk menggabungkannya ke suatu fungsi untuk mendapatkan semua alamat IP dan lainnya untuk wadah tertentu. Mereka sekarang ada di
.bashrc
file saya .Perintah pertama memberikan alamat IP semua wadah dan yang kedua alamat IP wadah tertentu.
sumber
Referensi wadah dengan nama:
Kemudian ambil alamat alamat IP dengan nama:
sumber
Saya menulis skrip Bash berikut untuk mendapatkan tabel alamat IP dari semua kontainer yang berjalan di bawah
docker-compose
.Anda harus mengubah jaringan variabel ke nama jaringan Anda sendiri.
sumber
Inilah jawaban cepat untuk bekerja:
Dapatkan nama atau ID wadah Anda:
Kemudian dapatkan IP:
Dapatkan port:
sumber
Docker ditulis dalam Go dan menggunakan sintaks Go untuk keperluan kueri juga.
Untuk memeriksa alamat IP wadah tertentu, Anda perlu menjalankan perintah (
-f
untuk "format"):Untuk ID atau nama kontainer, Anda dapat menjalankan perintah
yang akan mendaftar setiap wadah yang berjalan.
sumber
Berikut ini adalah solusi yang saya kembangkan hari ini di Python, menggunakan
docker inspect container
output JSON sebagai sumber data.Saya memiliki banyak wadah dan infrastruktur yang harus saya periksa, dan saya perlu mendapatkan informasi jaringan dasar dari wadah apa pun, dengan cepat dan cantik. . Itu sebabnya saya membuat skrip ini.
PENTING: Sejak versi 1.9, Docker memungkinkan Anda membuat beberapa jaringan dan melampirkannya ke wadah.
Outputnya adalah:
sumber
Hal di atas berfungsi jika wadah digunakan untuk jaringan jembatan default.
Namun, jika menggunakan jaringan jembatan khusus atau jaringan overlay, saya menemukan di bawah ini berfungsi lebih baik:
sumber
Untuk memperluas jawaban ko-dos, berikut ini adalah alias untuk mencantumkan semua nama wadah dan alamat IP mereka:
sumber
docker ps -q
untuk menghindaritail
, dan--format
untuk menghindari grep. Anda juga dapat mengirimkan beberapa ID kontainerdocker inspect
daripada ke dalam lingkaran.docker ps -q
hanya menampilkan ID numerik wadah, tapi saya pikir menggunakan nama mereka lebih baik.tail
hanya untuk menyingkirkan baris pertama (header tabel) & masih diperlukan. Aku bisa menggunakan--format
, meskipun:docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect --format="{{.NetworkSettings.IPAddress}}" $name | cut -d \" -f 4; done
. Tapi itu tidak terlihat seperti peningkatan besar ...grep
IMO lebih mudah dibaca.docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
Saya menggunakan cara sederhana ini
misalnya
sumber
Jika Anda menginstal Docker menggunakan Docker Toolbox, Anda dapat menggunakan aplikasi Kitematic untuk mendapatkan alamat IP kontainer:
sumber
docker inspect
tidak berfungsi saat Anda menjalankan kotak alat buruh pelabuhan. Ini akan melaporkan alamat IP, tetapi itu bukan alamat yang benar yang akan digunakan layanan Anda.Untuk mendapatkan alamat IP dan port host dari sebuah wadah:
Keluaran:
sumber
CATATAN!!! untuk Penggunaan Menulis Docker:
Karena Docker Compose membuat jaringan terisolasi untuk setiap cluster, metode di bawah ini tidak berfungsi
docker-compose
.Cara paling elegan dan mudah adalah mendefinisikan fungsi shell, yang saat ini menjadi jawaban terbanyak dari @ WouterD :
Docker dapat menulis ID kontainer ke file seperti program Linux:
Berlari dengan
--cidfile=filename
, Docker membuang ID wadah ke "nama file".Lihat " Docker menjalankan Bagian yang setara dengan PID " untuk informasi lebih lanjut.
Menggunakan file PID:
Menjalankan wadah dengan
--cidfile
parameter,app.cid
konten file seperti:Anda dapat menggunakan konten file untuk memeriksa wadah Docker:
Anda bisa mengekstrak IP kontainer menggunakan skrip Python sebaris:
Ini bentuk yang lebih ramah manusia:
Lihat " 10 alternatif untuk mendapatkan alamat IP kontainer Docker " untuk informasi lebih lanjut.
sumber
Untuk windows 10:
sumber
Ini akan mencantumkan semua IP kontainer pada host:
sumber
Docker memeriksa penggunaan untuk mencetak semua ips wadah dan namanya masing-masing
sumber
Hanya untuk kelengkapan:
Saya sangat suka
--format
opsi itu, tetapi pada awalnya saya tidak menyadarinya sehingga saya menggunakan Python satu-liner sederhana untuk mendapatkan hasil yang sama:sumber
Menggabungkan jawaban sebelumnya dengan menemukan ID kontainer berdasarkan nama gambar Docker:
sumber
Menggunakan:
sumber
$ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
172.17.0.2
Untuk wadah Windows digunakan
di mana
<container>
adalah nama atau id dari wadah.Anda dapat menggunakan
docker ps
untuk menemukan id wadah.sumber
Jika Anda lupa ID kontainer atau tidak ingin memanipulasi dengan perintah shell, lebih baik menggunakan UI seperti Portainer.
https://portainer.io/
Di sana Anda dapat menemukan semua informasi tentang wadah juga IP.
sumber