Docker: Mehrere Container verbinden

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
sandrac

Docker: Mehrere Container verbinden

Beitrag von sandrac » 01.09.2020 14:33:40

Hallo zusammen

Ich beschäftige mich seit wenigen Tagen etwas mit Docker und bekomme es gerade nicht hin zwei Container zu verbinden.

Als erstes habe ich auf Debian Docker und Docker Compose installiert. Nun habe ich mir als erstes einen MySQL Server mit phpMyAdmin aufgebaut. Die docker-compose.yml sieht etwas gekürzt so aus

Code: Alles auswählen

version: '3.8'

services:
  main-mariadb:
    image: mariadb:latest
    container_name: MariaDB
    volumes:
      - ./mariadb/mysql:/var/lib/mysql
      - ./mariadb/conf.d:/etc/mysql/conf.d/
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ....
    networks:
      - LAN-mysql

  phpmyadmin:
    ... 

volumes:
  mariadb:

networks:
  LAN-mysql:
Nun habe ich versucht einen separaten word Press Container aufzubauen.

Code: Alles auswählen

version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    container_name: Project_wordpress
    external_links:
      - main-mariadb
    volumes:
      - ./config/php.conf.ini:/usr/local/etc/php/conf.d/php.ini
      - ./data:/var/www/html
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: main-mariadb
      WORDPRESS_DB_NAME: ......
    networks:
    - LAN-mysql

volumes:
  data:

networks:
  LAN-mysql:
Ich habe schon einiges versucht auch mit external_links im network ein external und was ich sonst noch gefunden habe. Aber entweder startet der Container nicht oder word press kann keine verbindung aufbauen.

Hat da jemand eine Idee wie es richtig aussehen muss?

Gruss

sandra

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Docker: Mehrere Container verbinden

Beitrag von Lord_Carlos » 01.09.2020 14:55:15

Das einfachste ist alles in eine docker-compose zu packen.

Wenn man services in zwei docker-compose Dateien sind, die in verschiedenen Verzeichnissen liegen, dann bekommen die Netzwerke verschiedene projekt namen.
https://stackoverflow.com/a/59659195/2001062
Ich vermute da liegt der Hund begraben.

Bin da aber auch noch selber nicht ganz Fit und arbeite an einem Aehnlichen Problem.
Btw, du brauchst die ports nicht exposen, wenn ein anderer docker dadrauf zugreifen soll.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

sandrac

Re: Docker: Mehrere Container verbinden

Beitrag von sandrac » 01.09.2020 15:02:39

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 14:55:15
Das einfachste ist alles in eine docker-compose zu packen.
Das glaub ich. Sagen wir ich möchte 20 wordpress Container starten, dann wäre es doch schwachsinn in jedem dieser Container eine eigene MariaDB instanz laufen zu lassen?
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 14:55:15
Wenn man services in zwei docker-compose Dateien sind, die in verschiedenen Verzeichnissen liegen, dann bekommen die Netzwerke verschiedene projekt namen.
https://stackoverflow.com/a/59659195/2001062
Ich vermute da liegt der Hund begraben.
Die netzwerke sind ja eigentlich fix benannt. Die frage ist wie ich diese dann eintragen müsste?
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 14:55:15
Btw, du brauchst die ports nicht exposen, wenn ein anderer docker dadrauf zugreifen soll.
Was meinst du genau damit? Sorry bin auch noch am anfang

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Docker: Mehrere Container verbinden

Beitrag von Lord_Carlos » 01.09.2020 15:24:01

sandrac hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 15:02:39
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 14:55:15
Das einfachste ist alles in eine docker-compose zu packen.
Das glaub ich. Sagen wir ich möchte 20 wordpress Container starten, dann wäre es doch schwachsinn in jedem dieser Container eine eigene MariaDB instanz laufen zu lassen?
Korrekt. Das waere nicht optimal.
Du koenntest alle 20 wordpress container in die gleiche docker-compose packen, aber um ehrlich zu sein weis ich nicht was optimal ist in der groesse. Ich wollte dir nur den schnellen Ausweg geben.
sandrac hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 15:02:39
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 14:55:15
Wenn man services in zwei docker-compose Dateien sind, die in verschiedenen Verzeichnissen liegen, dann bekommen die Netzwerke verschiedene projekt namen.
https://stackoverflow.com/a/59659195/2001062
Ich vermute da liegt der Hund begraben.
Die netzwerke sind ja eigentlich fix benannt. Die frage ist wie ich diese dann eintragen müsste?
Die Netzwerke bekommen noch den Projekt namen drangeheangt.
Guck mal mit docker network ls dann siehst du das die <projektname>_LAN-mysql heissen.
Und der Projektname kommt default von dem Verzeichnisname in dem die docker-compose liegt.
Wenn du also zwei Verzeichnisse hast (/home/peter/mysql/dockercompose.yml und /home/peter/wordpressA/dockercompose.yml) dann wirst du Zwei Netzwerke haben. mysql_LAN-mysql und wordpressA_LAN-mysql.
Um das zu loesen kannst du den Projektnamen anpassen.
https://docs.docker.com/compose/referen ... oject_name
Entweder mit dem parameter -p oder einer .env Datei.
https://docs.docker.com/compose/env-file/

Das habe ich mir alles nur jetzt gerade angelesen. Werde es gleich selber mal testen.
sandrac hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 15:02:39
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 14:55:15
Btw, du brauchst die ports nicht exposen, wenn ein anderer docker dadrauf zugreifen soll.
Was meinst du genau damit? Sorry bin auch noch am anfang
Mysql wird wohl nur vom wordpress und anderen docker container gebraucht? Dann brauchst du die ports nicht oeffnen
ports:
- "3306:3306"

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

sandrac

Re: Docker: Mehrere Container verbinden

Beitrag von sandrac » 01.09.2020 16:06:06

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 15:24:01
Korrekt. Das waere nicht optimal.
Du koenntest alle 20 wordpress container in die gleiche docker-compose packen, aber um ehrlich zu sein weis ich nicht was optimal ist in der groesse. Ich wollte dir nur den schnellen Ausweg geben.
Da hast du recht. Docker hat mich vorallem auch Fasziniert da alles "abgekappselt" ist. Worpress aber auch andere Webanwendungen sind teilweise doch anfälliger für Angriffe wo es Docker angenehmer machen könnte.
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 15:24:01
Guck mal mit docker network ls dann siehst du das die <projektname>_LAN-mysql heissen.
Und der Projektname kommt default von dem Verzeichnisname in dem die docker-compose liegt.
Wenn du also zwei Verzeichnisse hast (/home/peter/mysql/dockercompose.yml und /home/peter/wordpressA/dockercompose.yml) dann wirst du Zwei Netzwerke haben. mysql_LAN-mysql und wordpressA_LAN-mysql.
Um das zu loesen kannst du den Projektnamen anpassen.
https://docs.docker.com/compose/referen ... oject_name
Entweder mit dem parameter -p oder einer .env Datei.
https://docs.docker.com/compose/env-file/

Das habe ich mir alles nur jetzt gerade angelesen. Werde es gleich selber mal testen.
den projektnamen habe ich schon verwendet. Der war mir soweit bekannt. nicht aber das docker network. die heissen wirklich wie von dir beschrieben, und wo der projektname verwendet wurde entsprechend mit dem projektnamen anstelle des ordners. Das klappt schon. Ich denke das war auch genau der entscheidende hinweis. DANKE.

Und nun kann ich auch eine verbindung aufbauen. Hier die angepasste docker-compose.yml für Wordpress

Code: Alles auswählen

version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    container_name: Project_wordpress
    external_links:
      - main-mariadb
    volumes:
      - ./config/php.conf.ini:/usr/local/etc/php/conf.d/php.ini
      - ./data:/var/www/html
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: main-mariadb
      WORDPRESS_DB_NAME: ......
    networks:
    - project_LAN-mysql

volumes:
  data:

networks:
  project_LAN-mysql:
    external: true

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Docker: Mehrere Container verbinden

Beitrag von Lord_Carlos » 01.09.2020 16:09:03

Jup. Gerade getestet.
Zwei Verzeichnisse. A und B

Code: Alles auswählen

./a:
./  ../  docker-compose.yml  .env
./b:
./  ../  docker-compose.yml  .env
In a:

Code: Alles auswählen

version: '3'
services:
  whoami:
    image: "jwilder/whoami"
und in b habe ich einfach ein container mit curl.
B kann nicht auf A zugreifen, selbst wenn ich networks angebe.
Jetzt habe ich aber in beiden .env ein Projektname angeben: COMPOSE_PROJECT_NAME=steve

Jetzt kann ich in container B auf container A zugreifen.
curl steve_whoami_1:8000
I'm 051d00d79639

Und wie du siehst geht das auch obwohl ich in A keine ports angegeben habe.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

Antworten