<!--
  canonical-url: https://www.avonture.be/fr/blog/docker-adminer-pgadmin-phpmyadmin
  published:     2023-12-27
  This is a static plain-Markdown mirror generated at build time.
  Visit the canonical URL above for the fully rendered page, with images and interactive components.
-->

# Utiliser Adminer, pgadmin ou phpmyadmin pour accéder à votre container de base de données Docker

> Utilisez Adminer, pgadmin ou phpmyadmin pour accéder à votre container de base de données Docker. Les instructions simples en ligne de commande pour MySQL, MariaDB et PostgreSQL.

---
![Utiliser Adminer, pgadmin ou phpmyadmin pour accéder à votre container de base de données Docker](/img/v2/database_admin.webp)

**TL;DR**

Cet article montre comment brancher une interface web de gestion de base de données sur un container MySQL/MariaDB/PostgreSQL existant en une seule commande : `docker inspect` (avec `jq`) pour trouver le nom du réseau du container, puis `docker run --network <net> --link <container>:db -p <port>:<port> adminer` (ou `phpmyadmin`) pour parcourir les tables et les enregistrements sans rien ajouter au `compose.yaml` d'origine.

Vous avez une application dockerisée et l'un de ses containers est un service MariaDB, MySQL ou PostgreSQL — pensez à ceux démarrés dans [Quickly install WordPress in just three commands](/blog/docker-wordpress) ou [Start Joomla with Docker in just a few clicks](/blog/docker-joomla-right-to-the-point).

Votre besoin : démarrer une interface web de gestion de base de données comme [Adminer](https://hub.docker.com/_/adminer/), [pgadmin](https://hub.docker.com/r/dpage/pgadmin4/) ou [phpmyadmin](https://hub.docker.com/_/phpmyadmin) et pouvoir accéder à vos tables et à vos enregistrements.

Cela se fait en une seule ligne de commande.

## Une commande, votre base de données dans un navigateur {#one-command-your-database-in-a-browser}

```bash
$ docker run -d --rm --name adminer --network joomla_default --link joomla-joomladb-1:db -p 8088:8080 adminer
```

Rendez-vous sur `http://127.0.0.1:`8088 et votre base de données est là :

> Screenshot — http\://127.0.0.1:8088
>
> ![adminer](./images/adminer.webp)

Tables, enregistrements, structure, console SQL — et rien n'a été ajouté à votre `compose.yaml`, rien n'a été installé sur votre machine. Quand vous avez terminé, le container se supprime tout seul grâce à `--rm`.

Seules deux valeurs de cette commande vous appartiennent : le **nom du container** qui héberge la base de données, et le **nom du réseau** sur lequel il tourne. Les deux sont à une commande de distance.

## Trouver votre container et son réseau {#find-your-container-and-its-network}

Nous allons utiliser `docker container list` pour obtenir la liste des containers ; on veut juste le nom de l'image et le nom du container.

**À titre d'illustration**, voici la sortie sur ma machine en ce moment :

```bash
$ {`docker container list --all --format "table {{.Image}}\t{{.Names}}"`}

IMAGE                        NAMES
mysql:8.0.13                 joomla-joomladb-1
joomla:5.0.1-php8.2-apache   joomla-joomla-1
```

Pour notre exemple, on veut se connecter au container MySQL 8.x joomla-joomladb-1.

La deuxième chose à déterminer est le nom du réseau utilisé par ce container. On utilise ici `docker inspect` (lisez mon article [Docker inspect - Retrieve network's information](/blog/docker-inspect)).

```bash
$ docker inspect joomla-joomladb-1 | jq -r '.[0].NetworkSettings.Networks'
```

```json
{
  # highlight-next-line
  "joomla_default": {
    "IPAMConfig": null,
    "Links": null,
    "Aliases": [
      "joomla-joomladb-1",
      "joomladb",
      "8bd385bf14c4"
    ],
    [ ... ]
  }
}
```

Le nom du réseau utilisé par joomla-joomladb-1 est donc joomla\_default, comme vous le voyez dans le JSON retourné.

## Lancer Adminer {#run-adminer}

Sous forme de template, la commande Adminer est :

```bash
$ `docker run -d --rm --name adminer --network <network_name> --link <container-name>:db -p 8088:8080 adminer`
```

Le flag `--network` doit donc recevoir le nom du réseau utilisé et `--link` est une valeur en deux parties : le nom du container auquel se connecter, suivi de `:db`.

> **Utilisez votre propre port avec le flag `-p`:**
>
> Dans l'exemple, on rend adminer accessible sur le port 8088. N'hésitez pas à en utiliser un autre, libre.

Sur l'écran de connexion d'Adminer :

* `System` : sélectionnez le service de base de données utilisé,
* `Server` : doit être le nom du service de base de données à l'intérieur de votre container Docker,
* `Username` : le nom de l'utilisateur de la base de données,
* `Password` : le mot de passe associé,
* `Database` : peut rester vide pour tout obtenir, sinon indiquez le nom de la base à ouvrir.

Pour retrouver le nom du serveur, c'est le nom du service tel que défini dans votre fichier `compose.yaml`, mais vous pouvez aussi l'obtenir avec cette commande : `docker inspect` joomla-joomladb-1 `| grep com.docker.compose.service`. Remplacez simplement joomla-joomladb-1 par le nom de votre container.

> **Utiliser un lien paramétré:**
>
> Si vous connaissez déjà certaines de ces valeurs, vous pouvez les fournir dans un lien, comme `http://127.0.0.1:`8088`?server=joomladb&username=root&db=joomla_db`.

## Lancer pgadmin {#run-pgadmin}

> **pgadmin est réservé aux bases de données PostgreSQL:**

## Lancer phpmyadmin {#run-phpmyadmin}

Pour phpmyadmin, la ligne de commande à lancer ressemble à ceci

```bash
$ `docker run -d --rm --name phpmyadmin --network <network_name> --link <container-name>:db -p 8089:80 phpmyadmin`
```

et donc, avec les valeurs de notre exemple,

```bash
$ docker run -d --rm --name phpmyadmin --network joomla_default  --link joomla-joomladb-1:db -p 8089:80 phpmyadmin
```

Pour ouvrir phpmyadmin, lancez votre navigateur et allez sur `http://127.0.0.1:`8089 puisque c'est le port défini ici.

> Screenshot — http\://127.0.0.1:8089
>
> ![phpmyadmin](./images/phpmyadmin.webp)

> Screenshot — http\://127.0.0.1:8089
>
> ![Liste des bases de données](./images/phpmyadmin_databases.webp)

## Conclusion {#conclusion}

Ce qu'il faut retenir : vous n'avez pas à prévoir ça à l'avance. Votre `compose.yaml` n'a pas besoin d'un service `adminer` « au cas où » : le jour où vous devez regarder les données, vous attachez une interface au réseau avec un seul `docker run`, et elle disparaît quand vous l'arrêtez.

Le seul prérequis est de connaître le nom du réseau, et [Docker inspect - Retrieve network's information](/blog/docker-inspect) détaille cette commande. Pour une application complète sur laquelle essayer tout ça, voyez [Créez votre site Joomla avec Docker](/blog/docker-joomla).
