Saya menggunakan Docker untuk Mac. Saya menjalankan microservice berbasis nodejs dalam wadah Docker. Saya ingin menguji layanan mikro node melalui browser. Bagaimana cara mendapatkan alamat IP dari menjalankan container docker?
Saya menggunakan Docker untuk Mac. Saya menjalankan microservice berbasis nodejs dalam wadah Docker. Saya ingin menguji layanan mikro node melalui browser. Bagaimana cara mendapatkan alamat IP dari menjalankan container docker?
Jawaban:
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.1
dan penampung pertama Anda harus 172.17.0.2
jika 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>
localhost
:)
http://172.17.0.2:anyPort
dari host. Tentu saja jika Anda ingin mengaksesnya menggunakan localhost di host, Anda harus memetakan port. Akan melihat apa yang diinginkan OP.
docker run --name struts --rm -i tomcat
2. Dapatkan ip container Anda (jika Anda hanya memiliki satu): docker inspect struts | grep '"IPAddress"' | head -n 1
3. Buka di browser host http://x.x.x.x:8080
. Anda dapat melihat halaman default Apache Tomcat.
Gunakan --format
opsi untuk hanya mendapatkan alamat IP, bukan seluruh info penampung:
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
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
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
Untuk kasus saya, di bawah ini berfungsi di Mac :
Saya tidak dapat mengakses IP kontainer secara langsung di Mac. Saya perlu menggunakan localhost
dengan port forwarding, misalnya jika portnya 8000, makahttp://localhost:8000
Lihat https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
Jawaban asli berasal dari: https://github.com/docker/for-mac/issues/2670#issuecomment-371249949
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:8080
perintah untuk menjalankan.
Meneruskan -p
Anda dapat memetakan port host ke port kontainer dan proxy disetel untuk meneruskan semua lalu lintas untuk port host tersebut ke port kontainer yang ditunjuk.