web-dev-qa-db-de.com

[Docker]: Das Verbinden von PHPMyAdmin mit MySQL funktioniert nicht

Ich versuche, einen PHPMyAdmin-Container mit einem MySQL-Container zu verbinden, um die Datenbanken anzuzeigen.

Ich habe den MySQL-Container über $ docker run --name databaseContainer -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql gestartet. 

und den PHPMyAdmin-Container über $ docker run --name myadmin -d --link databaseContainer:mysql -p 8080:8080 phpmyadmin/phpmyadmin

Wenn ich versuche, mich bei PHPMyAdmin anzumelden, bekomme ich: mysqli_real_connect (): php_network_getaddresses: getaddrinfo fehlgeschlagen: Name wird nicht aufgelöst

und

mysqli_real_connect (): (HY000/2002): php_network_getaddresses: getaddrinfo fehlgeschlagen: Name wird nicht aufgelöst

Ich habe übrigens auch einen Wordpress-Container gestartet und ihn mit mysql verlinkt, da funktioniert es ...

13
Pascal

Anstatt sie einzeln nacheinander zu starten, verwenden Sie die Docker-Erstellung.

Erstellen Sie eine docker-compose.yml-Datei

version: '2'
services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD:my-secret-pw
    ports:
      # just if you also want to access it directly from you Host
      # node neede for phpmyadmin
      - "3306:3306"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
      - db
    ports:
      - "8080:8080"

Starten Sie es dann mit docker-compose up im selben Ordner, in dem sich Ihre docker-compose.yml-Datei befindet. Rufen Sie PHPmyadmin über den Browser auf und verwenden Sie 'db' als Hostname Ihrer Datenbank. Dies ist der Name des Dienstes in der Datei docker-compose.yml. Daher kann er mithilfe des internen DNS-Dienstes von dockers auf die tatsächliche IP des Docker- Container. Alle Links werden automatisch für Sie eingerichtet. 

Das ist viel einfacher - der Docker-Betrieb macht die Dinge zu kompliziert und ist für diese Dinge nicht praktikabel - niemals.

Hinweis: Wenn Docker-Compose nicht auf Ihrem Computer installiert ist, installieren Sie es mithilfe dieser offiziellen Dokumente https://docs.docker.com/compose/install/ (außerhalb des Gültigkeitsbereichs).

26
Eugen Mayer

Die Konfigurationsdatei von phpmyadmin/phpmyadmin (/www/config.inc.php) sagt standardmäßig den Hostnamen des Datenbankservers, wenn 'db':

$ hosts = Array ('db');

Wenn Ihr Datenbanknamencontainer nicht 'db' ist, sollten Sie die Umgebungsvariable PMA_Host = (oder PMA_HOSTS bei mehreren Datenbankservern) mit dem richtigen Namen (in Ihrem Fall databaseContainer)

8
JL M
docker run --name db -e MYSQL_ROOT_PASSWORD=mypass -d mysql:5.7

docker run -p 80:80 --link db:mysql phpmyadmin/phpmyadmin

Versuchen Sie, den obigen Befehl auszuführen, da es funktioniert, da phpmyadmin in Ihrer Implementierung möglicherweise hartcodiert hat, dass der Name des mysql-Servers als Datenbank angegeben wird.

Wenn Sie Ihrem Datenbankserver dennoch einen eindeutigen Namen geben möchten, fügen Sie die Umgebungsvariable PMA_Host hinzu:

docker run --name myadmin -d --link mysqlserver:mysql -p 8080:80 -e PMA_Host=mysqlserver phpmyadmin/phpmyadmin

mysqlserver ist der Name, den Sie Ihrem MySQL-Datenbankserver geben.

2
AKASH DUBEY

GIVEN Sie haben den MySQL-Container als gestartet: 

$ docker run --name databaseContainer -e MYSQL_ROOT_PASSWORD = my-secret-pw -d mysql

DANN sollten Sie phpmyadmin wie folgt erstellen:

$ docker run --name myadmin -d --link mysql: db -p 8080: 8080 phpmyadmin/phpmyadmin

Es ist tatsächlich ratsam, dass Sie ein Netzwerk hinzufügen. Sie hätten also: 

$ docker run - name databaseContainer --network myDockerNetwork -e MYSQL_ROOT_PASSWORD = my-secret-pw -d mysql

UND

$ docker run - name myadmin - d - link mysql: db --network myDockerNetwork -p 8080: 8080 phpmyadmin/phpmyadmin

Stellen Sie sicher, dass Ihr Netzwerk zuerst erstellt wurde:

$ docker network myDockerNetwork erstellen

1
mtebong

In meinem Fall habe ich MySQL 8.0 verwendet, und es stellte sich heraus, dass mysql eine neue Kennwortidentifizierung eingeführt hat, die nicht von phpmyadmin ..__ unterstützt wird. Siehe diese Antwort

0
vivanov

Ich hatte den gleichen Fehler beim Installieren von Docker mit Laradock und anschließendem Ausführen von Docker-Compose. Die standardkonfiguration gibt diesen Fehler standardmäßig aus, wenn Sie versuchen, sich bei phpMyAdmin anzumelden (mit aktuellen Bildern ab Oktober 2018). Bei der Andockfahrt war der Fehler nicht vorhanden.

Für docker-compose.yml (Version 3) besteht eine Ursache darin, dass Dienste standardmäßig in verschiedenen Netzwerken ausgeführt werden. Für alle, die dieses Problem haben, ist hier eine Konfiguration, die für MySQL und Phpmyadmin funktioniert.

In der Datei "docker-compose.yml" unter "Dienste":

### db ###################################################
    db:
      image: mysql:5.7
      container_name: db
      environment:
        - MYSQL_ROOT_PASSWORD=mypass
      networks:
       - backend

### MySQL ################################################
    mysql:
      build:
        context: ./mysql
        args:
          - MYSQL_VERSION=${MYSQL_VERSION}
      environment:
        - MYSQL_DATABASE=${MYSQL_DATABASE}
        - MYSQL_USER=${MYSQL_USER}
        - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
        - TZ=${WORKSPACE_TIMEZONE}
      volumes:
        - ${DATA_PATH_Host}/mysql:/var/lib/mysql
        - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
      ports:
        - "${MYSQL_PORT}:3306"
      networks:
        - backend

## phpMyAdmin ###########################################
    phpmyadmin:
      build: ./phpmyadmin
      environment:
        - PMA_ARBITRARY=1
        - PMA_Host=db
        - MYSQL_USER=${PMA_USER}
        - MYSQL_PASSWORD=${PMA_PASSWORD}
        - MYSQL_ROOT_PASSWORD=${PMA_ROOT_PASSWORD}
      ports:
        - "${PMA_PORT}:80"
      depends_on:
        - db
        - mysql
      networks:
        - frontend
        - backend

Bearbeiten Sie die ".env" -Datei wie folgt:

### MYSQL #################################################

MYSQL_VERSION=5.7
MYSQL_DATABASE=db
MYSQL_USER=root
MYSQL_PASSWORD=mypass
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=mypass
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

### PHP MY ADMIN ##########################################

# Accepted values: mariadb - mysql

PMA_DB_ENGINE=mysql

# Credentials/Port:

PMA_USER=default
PMA_PASSWORD=secret
PMA_ROOT_PASSWORD=secret
PMA_PORT=8080

Fügen Sie der Datei "/ etc/hosts" folgende Zeile hinzu:

127.0.0.1   localhost

Vorausgesetzt, Sie verwenden auch nginx, und diese Konfiguration befindet sich an anderer Stelle in Ihrer "docker-compose.yml". Sie können diese Dienste mit folgendem Befehl erstellen und starten:

docker-compose up -d mysql nginx db phpmyadmin

Navigieren Sie dann in Ihrem Browser zu localhost: 8080 und melden Sie sich mit dem Benutzernamen "root" und dem Passwort "mypass" an (Serverfeld leer lassen).

0
Ivor