Docker kurulumundan sonra varsayılan olarak 3 ağınız olur:
docker network ls
NETWORK ID NAME DRIVER SCOPE
f3be8b1ef7ce bridge bridge local
fbff927877c1 host host local
023bb5940080 none null local
Bunu basit tutmaya çalışıyorum. Dolayısıyla, bir kapsayıcıyı varsayılan olarak başlatırsanız, köprü (docker0) ağı içinde oluşturulacaktır.
$ docker run -d jenkins
1498e581cdba jenkins "/bin/tini -- /usr..." 3 minutes ago Up 3 minutes 8080/tcp, 50000/tcp friendly_bell
Jenkins dockerfile'ında portlar 8080
ve 50000
açığa çıkar. Bu bağlantı noktaları, köprü ağındaki konteyner için açılır. Böylece, bu köprü ağı içindeki her şey konteynere bağlantı noktasından 8080
ve 50000
. Köprü ağındaki her şey "Subnet": "172.17.0.0/16",
, dışardan erişmek istiyorsanız, bağlantı noktalarını eşlemeniz gerekir -p 8080:8080
. Bu, konteynerinizin bağlantı noktasını gerçek sunucunuzun bağlantı noktasıyla (ana bilgisayar ağı) eşler. Bu nedenle, sunucunuza erişim 8080
, bağlantı noktasındaki köprü ağınıza yönlendirilecektir 8080
.
Artık ana ağınız da var. Hangi konteyner ağını kapsayıcı değil. Dolayısıyla, ana bilgisayar ağında bir kapsayıcı başlatırsanız, şöyle görünecektir (bu ilkidir):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1efd834949b2 jenkins "/bin/tini -- /usr..." 6 minutes ago Up 6 minutes eloquent_panini
1498e581cdba jenkins "/bin/tini -- /usr..." 10 minutes ago Up 10 minutes 8080/tcp, 50000/tcp friendly_bell
Aradaki fark, bağlantı noktalarında. Konteynırınız artık ana bilgisayar ağınızın içindedir. Dolayısıyla 8080
, ana makinenizde bağlantı noktasını açarsanız , konteynere hemen erişirsiniz.
$ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT
8080
Güvenlik duvarımda bağlantı noktasını açtım ve şu anda sunucuma bağlantı noktasından 8080
eriştiğimde jenkins'ime erişiyorum. Bu blogun daha iyi anlamak için de faydalı olduğunu düşünüyorum .
--net=host
bir Dockerfile içine eklemek mümkün mü?