web-dev-qa-db-fra.com

[Docker]: La connexion de PHPMyAdmin à MySQL ne fonctionne pas

J'essaie de connecter un conteneur PHPMyAdmin à un conteneur MySQL pour afficher les bases de données.

J'ai démarré le conteneur MySQL via $ docker run --name databaseContainer -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql 

et le conteneur PHPMyAdmin via $ docker run --name myadmin -d --link databaseContainer:mysql -p 8080:8080 phpmyadmin/phpmyadmin

Lorsque j'essaie de me connecter à PHPMyAdmin, je reçois: mysqli_real_connect (): php_network_getaddresses: getaddrinfo a échoué: le nom n'a pas été résolu

et

mysqli_real_connect (): (HY000/2002): php_network_getaddresses: getaddrinfo a échoué: le nom n'a pas été résolu.

A propos, j'ai aussi commencé un conteneur wordpress et l'ai également lié à mysql, là ça marche ...

13
Pascal

Au lieu de les démarrer un par un, utilisez docker compose.

Créez un fichier docker-compose.yml

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"

Puis lancez-le en utilisant docker-compose up dans le même dossier que votre fichier docker-compose.yml. Accédez à PHPmyadmin à l’aide du navigateur et utilisez «db» comme nom d’hôte de votre base de données, car il s’agit du nom du service figurant dans le fichier docker-compose.yml et peut donc être résolu à l’aide du service DNS interne de dockers, à l’adresse IP réelle du récipient. Tous les liens sont configurés pour vous automatiquement. 

C’est beaucoup plus simple: exécuter un menu fixe complique trop les choses et n’est pas pratique pour ces choses - jamais.

Astuce: si docker-compose n'est pas installé sur votre ordinateur, installez-le en utilisant cette documentation officielle https://docs.docker.com/compose/install/ (hors de portée)

26
Eugen Mayer

Le fichier de configuration de phpmyadmin/phpmyadmin (/www/config.inc.php) indique par défaut le nom d'hôte du serveur de base de données si 'db':

$ hosts = array ('db');

Donc, si votre conteneur de nom de base de données n'est pas 'db', vous devez ajouter la variable d'environnement PMA_Host = (ou PMA_HOSTS si plusieurs serveurs sont installés) avec le nom correct (databaseContainer dans votre cas)

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

Essayez d’exécuter la commande ci-dessus, cela fonctionnera, car phpmyadmin a peut-être codé en dur le nom de conatiner du serveur mysql à db.

Si vous souhaitez toujours attribuer un nom unique à votre serveur de base de données, ajoutez la variable d'environnement PMA_Host:

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

mysqlserver est le nom donné à votre serveur de base de données mysql.

2
AKASH DUBEY

DONNÉ que vous avez démarré le conteneur MySQL en tant que: 

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

ALORS, vous devriez créer phpmyadmin comme suit:

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

En fait, il est conseillé d'inclure un réseau. Donc vous auriez: 

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

ET

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

Assurez-vous que votre réseau est créé en premier:

réseau docker créer myDockerNetwork

1
mtebong

Dans mon cas, j'utilisais MySQL 8.0 et il s'est avéré que mysql a introduit une nouvelle identification de mot de passe qui n'est pas supportée par phpmyadmin . Voir cette réponse

0
vivanov

J'ai eu la même erreur lors de l'installation de docker avec laradock, puis de l'exécution de docker-compose. Par défaut, la configuration par défaut lève cette erreur lorsque vous essayez de vous connecter à phpMyAdmin (en utilisant les images actuelles à compter d'octobre 2018). L'erreur n'était pas présente lors de l'exécution de docker.

Pour docker-compose.yml (version 3), les services s'exécutant par défaut sur des réseaux différents. Pour ceux qui ont ce problème, voici une configuration qui fonctionne pour mysql et phpmyadmin.

Dans le fichier "docker-compose.yml", sous "services":

### 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

Editez le fichier ".env" comme suit:

### 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

Ajoutez la ligne suivante au fichier "/ etc/hosts":

127.0.0.1   localhost

En supposant que vous utilisez également nginx et que la configuration est ailleurs dans votre "docker-compose.yml", vous pouvez créer et démarrer ces services avec:

docker-compose up -d mysql nginx db phpmyadmin

Ensuite, accédez à localhost: 8080 dans votre navigateur et connectez-vous avec le nom d'utilisateur "root" et le mot de passe "mypass" (laissez le champ du serveur vide).

0
Ivor