Saya sekarang mencoba untuk menetapkan IP 172.17.0.1 statis ketika wadah Docker dimulai.
Saya menggunakan port 2122 sebagai port ssh wadah ini sehingga saya membiarkan wadah ini mendengarkan port 2122.
sudo docker run -i -t -p 2122:2122 ubuntu
Perintah ini akan menjalankan wadah Docker dengan IP acak seperti 172.17.0.5, tapi saya perlu menetapkan IP tertentu ke wadah.
Script shell berikut adalah apa yang saya rujuk dokumentasi Docker dalam pengaturan jaringan lanjutan.
pid=$(sudo docker inspect -f '{{.State.Pid}}' <container_name> 2>/dev/null)
sudo rm -rf /var/run/netns/*
sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid
sudo ip link add A type veth peer name B
sudo brctl addif docker0 A
sudo ip link set A up
sudo ip link set B netns $pid
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link delete eth0
sudo ip netns exec $pid ip link set dev B name eth0
sudo ip netns exec $pid ip link set eth0 address 12:34:56:78:9a:bc
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link set eth0 up
sudo ip netns exec $pid ip addr add 172.17.0.1/16 dev eth0
sudo ip netns exec $pid ip route add default via 172.17.42.1
Skrip shell ini akan menetapkan IP statis 172.17.0.1 dan tautan ke denda dunia. Tetapi setiap kali saya mencoba ssh ke wadah ini dari lokal saya, itu tidak berhasil. Apa masalah yang mungkin saya temui?
Jawaban:
Mudah dengan Docker versi 1.10.1, build 9e83765.
Pertama, Anda perlu membuat jaringan buruh pelabuhan Anda sendiri (mynet123)
daripada hanya menjalankan gambar (saya akan mengambil ubuntu sebagai contoh)
lalu di shell ubuntu
Selain itu Anda bisa menggunakan
--hostname
untuk menentukan nama host--add-host
untuk menambahkan lebih banyak entri ke / etc / hostsDocuments (dan mengapa Anda perlu membuat jaringan) di https://docs.docker.com/engine/reference/commandline/network_create/
sumber
Untuk
docker-compose
Anda dapat menggunakan mengikutidocker-compose.yml
dari host Anda dapat menguji menggunakan:
Modern
docker-compose
tidak sering mengubah alamat ip.Untuk menemukan ips dari semua kontainer di
docker-compose
dalam satu baris Anda gunakan:Jika Anda ingin mengotomatisasi, Anda dapat menggunakan sesuatu seperti intisari contoh ini
sumber
ip_range
ip_range
. Saya menggunakan versi: '3.4'.Bukan jawaban langsung tetapi bisa membantu.
Saya menjalankan sebagian besar layanan buruh pelabuhan saya yang terikat dengan ips statis menggunakan pendekatan berikut:
Sampel:
sumber
Ini bekerja untuk saya.
Buat jaringan dengan
docker network create --subnet=172.17.0.0/16 selnet
Jalankan gambar buruh pelabuhan
docker run --net selnet --ip 172.18.0.2 hub
Awalnya, saya mengerti
Solusi: Meningkatkan quadruple ke-2 dari IP [.18. bukannya 0,17.]
sumber
Saya menemukan masalah ini selama upaya untuk merebus Avahi yang perlu menyadari IP publiknya berfungsi dengan baik. Menetapkan IP statis ke wadah rumit karena kurangnya dukungan untuk penetapan IP statis di Docker.
Artikel ini menjelaskan teknik cara menetapkan IP statis ke wadah di Debian :
Layanan Docker harus dimulai dengan
DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false"
. Saya berasumsibr0
jembatan itu sudah dikonfigurasi.Kontainer harus dimulai dengan
--cap-add=NET_ADMIN --net=bridge
Wadah
pre-up ip addr flush dev eth0
di dalam/etc/network/interfaces
dapat digunakan untuk mengabaikan alamat IP yang diberikan oleh Docker seperti dalam contoh berikut:/etc/init.d/networking start
. Juga skrip entri perlu mengedit atau mengisi/etc/hosts
file untuk menghapus referensi ke IP yang ditugaskan Docker.sumber
Anda dapat mengatur IP saat menjalankannya.
Lihat contoh saya di https://github.com/RvdGijp/mariadb-10.1-galera
sumber
Anda dapat mengakses layanan kontainer lain dengan nama mereka (
ping apache
akan mendapatkan ip ataucurl http://apache
akan mengakses layanan http) Dan ini bisa menjadi alternatif dari ip statis.sumber
Jika Anda ingin wadah Anda memiliki soket ethernet virtual sendiri (dengan alamat MAC itu sendiri), iptables, kemudian gunakan driver Macvlan. Ini mungkin perlu untuk mengarahkan lalu lintas ke router / ISP Anda.
https://docs.docker.com/engine/userguide/networking/get-started-macvlan
sumber