Saya memiliki banyak kontainer buruh pelabuhan yang perlu saya addressable di LAN yang sama dengan host mereka. Sampai sekarang, saya telah mencapai ini dengan menggunakan pengaturan jembatan dan secara manual menetapkan mereka IP , dan mengelola IP sendiri. Contoh startup akan seperti ini:
docker run \
--net="none" \ \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.1.3/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.1.254" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
Dengan host yang mendefinisikan bridge di /etc/network/interfaces
(ubuntu) seperti:
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.254
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Sejak saya menemukan budak , saya telah mencoba untuk pindah menggunakan penemuan otomatis dalam wadah, sehingga DHCP dapat melacak IP dan membagikannya ke wadah. Saya sejak mengubah perintah startup ke:
docker run \
--net="none" \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
/bin/bash
dan jembatan ke:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Ini mengakibatkan wadah memulai, tetapi tidak memiliki IP. Saya kemudian menerima saran dari sebuah posting online yang berhasil menyelesaikannya dengan Fedora, dengan menelepon dhclient
. Sayangnya ini tidak berfungsi untuk saya dalam wadah berbasis ubuntu.
Di bawah ini adalah pesan kesalahan berikut yang saya dapatkan dalam kondisi yang berbeda:
Berjalan
dhclient
ketika saya telah mengaktifkan--privileged
dalam memulai wadah:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
Berjalan
sudo dhclient eth0
saat tidak ada--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
Lari
sudo dhclient
ataudhclient
(tidak ada antarmuka yang ditentukan).Segera kembali dan masih belum ada konektivitas IP atau jaringan.
Bagaimana saya bisa mendapatkan buruh pelabuhan untuk mengambil IP dinamis dari subnet yang sama dengan host mereka, sehingga saya bisa menggunakan kontainer di banyak host tanpa melacak IP?
Informasi tambahan
- Lari
DOCKER_OPTS="-e lxc"
masuk/etc/default/docker
- Host adalah Ubuntu 14.04
- Wadah Docker dibuat menggunakan
from ubuntu:14.04
Dockerfile.
dhclient
dari/sbin
ke/usr/sbin
definisi kebijakan Apparmor tidak akan cocok lagi dan Apparmor tidak akan menerapkan batasan keamanan apa pun untuk aplikasi "tidak dikenal" ini.Saya telah menemukan skrip
https://github.com/jkrauska/tech-notes/blob/master/docker-dhclient.md
yang melakukan persis apa yang Anda inginkan (solusi yang disebutkan oleh Programster).
Perintah mv diperlukan, karena ketika Anda menjalankan docker container dalam mode privilege, docker tidak mendefinisikan profil AppArmor untuk container. Jadi profil AppArmor default-mesin digunakan, dan itu mencegah Anda menjalankan dhclient di jalur defaultnya.
sumber
jika Anda mencoba untuk mendapatkan alamat dhcp pada wadah buruh pelabuhan ubuntu lakukan saja hal berikut:
--dns <my_dns_ip>
)/etc/dhcp/dhclient.conf
dan edit baris yang berisirequest subnet-mask, broadcast-address...
dan hapus kata-katadomain-name, domain-name-servers
service networking restart
Anda akan mendapatkan alamat dhcp baru tanpa pesan kesalahansumber
Kemungkinan lainnya adalah menggunakan "pipework." Anda harus menjalankannya di luar wadah Anda. https://github.com/jpetazzo/pipework
sumber
pipework
, di mana orang dapat menemukannya, bagaimana itu dapat diinstal, mungkin memberikan contoh penggunaannya? Seperti berdiri, jawaban Anda adalah komentar dan bukan jawaban.