Docker - 2 Container -> Verbindung aufbauen

Martins12

Newbie
Registriert
Jan. 2019
Beiträge
5
Hey hey :)


ich komm hier nicht weiter...

ich hab mehrere mysql Container laufen. Diese laufen alleine für sich, sprich kein docker-compose mit phpMyAdmin oder ähnliches.

Jetzt möchte ich aber dennoch die Möglichkeit nutzen mich wahlweise per PhpMyAdmin zu verbinden.
Wie würde ich den PhpMyAdmin Container zum Mysql Container verbinden?

Versucht habe ich folgendes:
docker run -d -e MYSQL_ROOT_PASSWORD=1 --name test mysql:latest

docker run -d --link test -p 7999:80 phpmyadmin/phpmyadmin



Wo liegt der Fehler? :D


Besten Dank an alle :)
 
Aus der Doku vom phpmyadmin Docker Image (https://hub.docker.com/r/phpmyadmin/phpmyadmin/) geht hervor dass man den Hostname vom mysql Container per Environment Variable übergeben kann:

Probier mal sowas:
docker run --name myadmin -d -e PMA_HOST=test-p 7999:80 phpmyadmin/phpmyadmin

Entscheidend dürfte hier das -e PMA_HOST=test sein
 
  1. Was genau passiert denn? Bekommst du eine fehlermeldung? Wie sprichst du den mysql container von phpmyadmin aus an?
  2. Der link flag soll eigendlich nicht mehr verwendet werden.
  3. Probier mal Networks aus. Damit kannst du beide container einem netzwerk hinzufügen über das die dann kommunizieren kannst.
 
Hey :)
@jokakilla
habs so probiert, leider ging es nicht.

@dasbene
1. siehe Screenshot. Keine Verbindung zu mySQL?!
2. ok, danke :)
3. War auch mein Gedanke, gerne hätte ich aber eine flexiblere Methode wie bspw.: PMA_HOST Variable übergeben oder ähnliches


11111111.png
 
Hm sieht so aus als würde die Namensauflösung nicht funktionieren.

Ich würde mehrere Dinge nacheinander versuchen (in von mir präferierter Reihenfolge):
  • Testhalber statt -e PMA_HOST=test über den hostname vom Docker Host System testen -e PMA_HOST=dockerHostname und beim mysql Container den Port exposen (-p 3306:3306)
  • Docker Compose Datei nutzen (Beispiel aus der Mysql Container Doku, nutzt Adminer statt PhpMyAdmin)
Code:
# Use root/example as user/password credentials
version: '3.1'

services:

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
- Ein Docker Netzwerk erstellen und beide Container dort rein werfen https://docs.docker.com/network/
 
  • Gefällt mir
Reaktionen: Martins12
@jokakilla
Danke dir :)
Namensauflösung funktioniert nun mittels: "PMA_HOST=dockerHostname", allerdings weiterhin kein login möglich.

222222.png
 
Na dann sind wir schon einen Schritt weiter :)

Hm wie ist denn der Standard Benutzername bei mysql? root? admin? Du hast als Parameter für den Container ja nur das root Passwort mitgegeben.
 
Das Netzwerk zwischen den Containern kannst du auch direkt im compose-file angeben. Da kann man dann auch recht einfach einen Domain alias angeben.

Ich denke das primäre Problem das du gerade hast, ist das der root User sich mittlerweile standardmäßig nur von localhost verbinden darf.
Also entweder einen extra user anlegen, oder dem root user auch externen Zugriff erlauben.

Denk bitte auch dran das du dem MySQL Container derzeit keinerlei Volumens zugewiesen hast. Deine Daten werden dementsprechend gelöscht sobald du den Container löschst oder compose ihn zum ändern neu erzeugt.
Ergänzung ()

Deine Fehlermeldung bekomme ich nur wenn ich nicht das Authentication-Plugin auf mysql_native_password setze. Das ist notwendig weil die mysql library die im phpmyadmin container verwendet wird noch nicht mit den neuen Authentication-Plugins funktioniert.

Ich hab hier mal ein compose-file zusammengestellt mit dem ich Erfolg hatte.

Einfach als docker-compose.yml in einen Ordner legen und dort docker-compose up -d ausführen. Nach ein paar Sekunden sollte mysql fertig initialisiert sein und phpmyadmin auf localhost:8080 erreichbar sein.

Die Datein die mysql anlegt werden in dem Ordner abgelegt in dem die compose Datei liegt. Den Ordner kannst du natürlich ändern oder die volume definition komplett löschen.

Code:
version: "2.3"

x-defaults: &defaults
   restart: unless-stopped

services:
  db:
    <<: *defaults
    image: mysql:8
    # do not use the following line in production:
    command: --default-authentication-plugin=mysql_native_password
    networks:
      databaseNetwork:
        aliases:
          - mysql
          - db
          - database
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - ./data/mysql:/var/lib/mysql

  phpmyadmin:
    <<: *defaults
    image: phpmyadmin/phpmyadmin
    depends_on:
      - db
    networks:
      databaseNetwork:
    environment:
      PMA_HOST: database
    ports:
      # remove the "127.0.0.1:" if you want to allow network wide access
      - 127.0.0.1:8080:80


networks:
  databaseNetwork:
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben