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 ...
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).
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)
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.
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
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 .
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).