2015-07-15 13 views
10

UDP'yi bilinen bir bağlantı noktasında kalp atışı yapan bir uygulamayı "dockerizing" ediyorum. Bu, çeşitli ana makinelerde docker-engine-1.7.0 ile (Fedora, Centos7, SLES 12).docker docker0 ve kapsayıcı yayın adresleri ayarlanmadı

Docker ana bilgisayarındaki 'docker0' köprüsünün ve kapsayıcının içindeki 'eth0' öğelerinin her birinin 0,0.0,0 yayın adresini aldığını fark ettim.

Sunucuda yönetici ayrıcalığı varsayarak yayın adresini docker0'da elle ayarlayabilirim. Benzer şekilde, kapsayıcıda (kapsayıcı ayrıcalıklıysa veya NET_ADMIN, NET_BROADCAST ile çalışıyorsa), ancak yayın adresinin neden varsayılan olarak ayarlanmadığını merak ediyorum. Docker'ın bunu otomatik olarak yapması için eksik bir yapılandırma seçeneği var mı?

Host:

# ifconfig docker0 broadcast 172.17.255.255 up 
# tcpdump -i docker0 -p 5000 

Konteyner: yayın adresleri ayarlandıktan sonra kaba ana bilgisayardan

# ifconfig eth0 broadcast 172.17.255.255 up 
# echo "Hello world" | socat - UDP-DATAGRAM:172.17.255.255:5000,broadcast 

Yayını da çalışır.

+0

Ayrıca bkz .: https://serverfault.com/a/881662 – tne

cevap

0

Docker kabına NET_ADMIN geçiş yapıyorsanız, uygulamanız için docker0 ağını kullanmam.

Yapmaya çalıştığınız şeyi doğru şekilde anladım, bilinen bir bağlantı noktasında kalp atışları yapan UDP yayını, farklı ana bilgisayarlara ait olan Docker kapsayıcıları tarafından, aynı ana bilgisayardaki farklı docker kapsayıcıları tarafından değil, birbirini bulmak için kullanılır.

Sonra --net=host kullanmayı öneriyoruz:

docker run --net=host --cap-add NET_ADMIN ....

Bunun gibi liman işçisi kabın içine bir kabuk alırsanız, ağ ortamı tam olarak konağın aynı biri olduğunu göreceksiniz kapları çalıştırıyor. Uygulamanız UDP yayını kullanarak daha önce bu sunucuda çalışıyorsa, docker kabında aynı şekilde çalışacaktır.

İlgili konular