Puncte:1

docker - creați două containere au două ID de rețea diferite în loc să utilizeze rețeaua de punte implicită

drapel uz

Scopul meu a fost asta Jenkins containerul va „vorbi” cu Ansible container pentru a crea Jenkins fisier pentru Jenkins conductă.

Eram de așteptat ca acele două containere să se „unească” la pod rețea și obțineți 2 adrese IP ale aceluiași ID de rețea, dar în schimb au fost create două rețele suplimentare, iar fiecare container a primit IP-ul de rețea diferit.

De asemenea, se aștepta ca acele două containere să aibă acces la internet.

Deci, în Windows 10 rulez Docker Desktop, Am 2 fișiere docker-compose.yml,
Unul pentru Jenkins container:

versiunea: „3.7”
Servicii:
  jenkins:
    imagine: jenkins/jenkins:lts
    privilegiat: adevărat
    utilizator: root
    porturi:
      - 8080:8080
      - 50000:50000
    container_name: jenkins

Altul, pentru Ansible container:

versiunea: '2'
Servicii:
  ansible:
    container_name: ansible
    nume gazdă: ansible
    imagine: ansible
    volume:
      - ~/produs/ansible:/ansible
    work_dir: /ansible
    construi:
      context: .
      dockerfile: Dockerfile
    dns:
      - 200.20.200.20

Am rulat următoarea comandă pentru fiecare fișier docker-compose.yml, așa că am avut două mașini separate:

docker-compose up --build

Am inspectat detaliile rețelei containerului meu și am aflat că fiecare container are un ID de rețea diferit, vezi mai jos:

PS > docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ansible
172.18.0.2
PS > docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' jenkins
172.19.0.2

verificați secțiunea mea de rețele docker, a dezvăluit că au fost create încă 2 rețele, în plus pod, gazdă și nici unul:

PS > docker network ls
ID REȚEA NUMELE ȘOFER DOMENIUL DE APLICARE
8cefaed24885 ansible_default bridge local
44bedcd1622d pod pod local
61e1c7f7051e gazdă gazdă locală
b5a7a7a424a4 jenkins_default pod local
4e5d6c77cb5a nici unul nul local

Desigur, inspectarea pod rețeaua arată că recipient cheia este goală:

{
    „Nume”: „pod”,
    „Id”: „44bedcd1622d820ce4e29a5cd545f244ba2d303102f1956fe76069a63e7c220e”,
    „Creat”: „2021-08-25T13:13:57.6577149Z”,
    „Scope”: „local”,
    „Driver”: „pod”,
    „EnableIPv6”: fals,
    „IPAM”: {
        „Driver”: „implicit”,
        „Opțiuni”: nul,
        „Configurare”: [
            {
                „Subrețea”: „172.17.0.0/16”,
                „Gateway”: „172.17.0.1”
            }
        ]
    },
    „Intern”: fals,
    „Atașabil”: fals,
    „Ingress”: fals,
    „ConfigFrom”: {
        „Rețea”: „”
    },
    „ConfigOnly”: fals,
    „Containere”: {},
    "Opțiuni": {
        "com.docker.network.bridge.default_bridge": "adevărat",
        "com.docker.network.bridge.enable_icc": "adevărat",
        "com.docker.network.bridge.enable_ip_masquerade": "adevărat",
        "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
        "com.docker.network.bridge.name": "docker0",
        "com.docker.network.driver.mtu": "1500"
    },
    „Etichete”: {},
    „CreatedTime”: 1629897237657
}

Intrebarea mea sunt:
a) De ce au fost create încă două rețele docker când am rulat docker-compose up --build comanda?
b) Cum pot face ca acele containere să funcționeze pod rețea și obțineți IP-uri cu același ID de rețea (ID-ul rețelei bridge 172.17.x.x) pentru ca ei să vorbească între ei?

Puncte:0
drapel ro

Soluția pentru conectarea mai multor instanțe docker-compose este utilizarea rețelelor externe.

Mai întâi creați o nouă rețea cu comanda:

docker network creați-mi rețeaua

Apoi adăugați la ambele docker-compose.yml următoarele:

retele:
  rețeaua mea:
    extern: adevărat

Și în secțiunea de rețea a serviciilor:

(...)
  retele:
    - rețeaua mea
(...)

Docker-compose Jenkins ar deveni:

versiunea: „3.7”

retele:
  rețeaua mea:
    extern: adevărat

Servicii:
  jenkins:
    imagine: jenkins/jenkins:lts
    privilegiat: adevărat
    utilizator: root
    retele:
      - rețeaua mea
    porturi:
      - 8080:8080
      - 50000:50000
    container_name: jenkins

Urmați aceeași idee pentru celălalt docker-compose.yml.

drapel uz
Mulțumiri. Vă rugăm să clarificați: a) Există o modalitate de a utiliza rețeaua *default bridge*? b) Este sintaxa pentru docker-compose ```version: 3.7``` egală cu ```versiunea 2.0```?
drapel uz
Cum includ IP-ul static în soluția dvs.?
João Alves avatar
drapel ro
a) Rețeaua bridge implicită este disponibilă numai pentru serviciile dintr-un anume docker-compose.yml. Dacă puneți toate serviciile în acel fișier, toate vor partaja aceeași rețea. b) Fiecare versiune de docker-compose yaml are sintaxa ei specifică, în mod normal complementară, dar există câteva excepții. Documentația referitoare la acest subiect este foarte extinsă pe site-ul docker (https://docs.docker.com/compose/compose-file/compose-versioning/). - Nu este obișnuit să folosiți un IP static în docker. Puteți rezolva o adresă ip din DNS. Un exemplu: de la jenkins: containerul ansible este `ansible.my_network`.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.