Încerc să fac două containere să comunice pe un server ca și cum ar funcționa pe mașina mea.
Chestia este că nu sunt capabili să comunice (încercând să pună ping containerul B din containerul A)
Am creat mai întâi un Dockerfile care folosește o imagine Python. Rețineți că folosesc --network=gazdă
opțiunea de a construi acest container (fără nu pot obține pachete pe internet)
În continuare, am un docker-compune
fișier care creează două containere folosind imaginea creată anterior.
ID REȚEA NUMELE ȘOFER DOMENIUL DE APLICARE
939d3e6af24e pod pod local
2d455afde6fc dcoflask_default pod local
97f17b13840c gazdă gazdă locală
0f40cabe1c02 nici unul nul local
Prin inspectarea rețelei unde sunt atașate cele 2 containere ale mele:
„Containere”: {
„2fe15640751ac7f6dd7bfa20e2e646e44cc2c53fbfa25e8f4df25dfbc08adb9f”: {
„Nume”: „mssql”,
„EndpointID”: „39d1a5429f676d990c52932eed8a66376f76b9cbbff9bcd53b256e1720798bfd”,
„MacAddress”: „02:42:ac:12:00:02”,
„Adresa IPv4”: „172.18.0.2/16”,
„Adresa IPv6”: „”
},
„50fc9a1f4a4743f2a4e9f80cd2d73515bad4fed748360fc4a26f289c06f8b245”: {
„Nume”: „web-dco”,
„EndpointID”: „7d389570b1c80fa7a1fbb4a633dabbb4f7afd0063acb6cd41f12fc56a290650c”,
„MacAddress”: „02:42:ac:12:00:03”,
„IPv4Address”: „172.18.0.3/16”,
„Adresa IPv6”: „”
}
},
Putem confirma că se află pe aceeași interfață de rețea.
Prin emiterea unui ping (de la container web-dco), nu pot obține un răspuns de la celălalt container (mssql)
PING mssql (172.18.0.2) 56(84) octeți de date.
^C
--- statistici ping mssql ---
6 pachete transmise, 0 primite, 100% pierdere de pachete, timp 125 ms
Făcând un pic de adulmecare pe interfața de rețea creată pentru rețeaua de containere, pot vedea cererile, dar niciun răspuns:
legrand.g@my-server:~$ sudo tshark -i br-2d455afde6fc
Introduceți parola pentru MFA interactiv. În caz contrar, introduceți parola urmată de codul PingID de 6 cifre:
Rulează ca utilizator „rădăcină” și grup „rădăcină”. Acest lucru ar putea fi periculos.
Captură pe „br-2d455afde6fc”
1 0,000000000 172.18.0.2 â 143.26.128.29 DNS 85 Interogare standard 0x54a6 A vortex.data.microsoft.com
2 4.001179175 172.18.0.2 â 192.44.120.10 DNS 85 Interogare standard 0x54a6 A vortex.data.microsoft.com
3 4.088081213 02:42:ac:12:00:02 â 02:42:40:e2:2c:15 ARP 42 Cine are 172.18.0.1? Spune 172.18.0.2
4 4.088130713 02:42:40:e2:2c:15 â 02:42:ac:12:00:02 ARP 42 172.18.0.1 este la 02:42:40:e2:2c:15
5 5.003686924 172.18.0.2 â 143.26.128.29 DNS 85 Interogare standard 0x54a6 A vortex.data.microsoft.com
6 9.004492793 172.18.0.2 â 192.44.120.10 DNS 85 Interogare standard 0x54a6 A vortex.data.microsoft.com
^ Pachete C6 capturate
În sfârșit, din postările anterioare despre comunicarea containerelor, nu văd nimic greșit în iptables
-P ACCEPT INTRARE
-P ACCEPTAȚI ÎNTÂMPRE
-P ACCEPT IEȘIRE
-N DOCKER
-N DOCKER-IZOLARE-ETAPA-1
-N DOCKER-ETAPA DE IZOLARE-2
-N DOCKER-UTILIZATOR
-A INTRARE -p tcp -m tcp --dport 22 -j ACCEPT
-UN FORWARD -j DOCKER-UTILIZATOR
-A ÎNAINTE -j DOCKER-ETAPA DE IZOLARE-1
-A FORWARD -o br-2d455afde6fc -m conntrack --ctstate RELATED,STABLISHED -j ACCEPT
-A FORWARD -o br-2d455afde6fc -j DOCKER
-A ÎNTÂMPRE -i br-2d455afde6fc ! -o br-2d455afde6fc -j ACCEPT
-A FORWARD -i br-2d455afde6fc -o br-2d455afde6fc -j ACCEPT
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,STABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A ÎNTÂMPRE -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A IEȘIRE -p tcp -m tcp --sport 22 -j ACCEPT
-A DOCKER -d 172.18.0.2/32 ! -i br-2d455afde6fc -o br-2d455afde6fc -p tcp -m tcp --dport 1433 -j ACCEPT
-A DOCKER -d 172.18.0.3/32 ! -i br-2d455afde6fc -o br-2d455afde6fc -p tcp -m tcp --dport 5000 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i br-2d455afde6fc ! -o br-2d455afde6fc -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-IZOLARE-ETAPA-1 -j RETURNARE
-A DOCKER-ISOLATION-STAGE-2 -o br-2d455afde6fc -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-IZOLARE-ETAPA-2 -j RETURNARE
-UN DOCKER-USER -j RETURN
Singura diferență pe care o pot vedea între rularea acestor containere pe mașina mea și pe server este că pe mașina mea, nu trebuie să construiesc fișierul Dockerfile cu --network=gazdă
opțiune.
Nici Internetul nu este accesibil, dar aceasta este cealaltă parte a problemei, aș dori mai întâi să înțeleg de ce două containere simple nu pot comunica chiar dacă folosesc aceeași rețea.
N.B Redirecționarea IP este activată:
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1