Connexion à la base de donnée Docker impossible

Documentation de cet article

Lors de l'initialisation d'un projet Symfony avec le binaire, Symfony génère automatiquement un fichier docker-compose.yml et docker-compose.override.yml. Ces fichiers fonctionnent pour lancer une app Symfony avec Docker en plus de symfony server:start mais vous pourriez rencontrer des difficultés pour vous connecter à votre base de donnée vous-même, par exemple via phpMyAdmin, HeidiSQL ou quelconque client de gestion de base de donnée.

D'où vient le problème et comment le régler

Votre client de gestion de base de donnée pourrait vous dire que le nom ou le port sont incorrects, que la base de donnée n'accepte pas les connexions ou encore que les identifiants sont incorrects. En fait, si vous n'avez rien touché à vos fichiers de configuration, ces problèmes peuvent être réglés très simplement avec une ligne. Rendez-vous dans le fichier docker-compose.override.yml et regardez la ligne précisant port de la base de donnée

services:###> doctrine/doctrine-bundle ###  database:    ports:      - "5432" # <-- ici###< doctrine/doctrine-bundle ###

Il précise un port pour la machine, mais pas de port pour Docker. Symfony à donc accès en interne au port, mais vu qu'aucune liaison n'est faite entre Docker et la machine, vous ne pouvez pas vous connecter, car le port 5432 ne redirige pas vers le container Docker. Pour assigner un port à Docker et le lier à celui exposé sur la machine, rajouter simplement :5432 après le port déjà défini de la façon suivante :

services:###> doctrine/doctrine-bundle ###  database:    ports:      - "5432:5432" # <-- encore ici###< doctrine/doctrine-bundle ###

Et voilà, aucune magie derrière tout ça, si vous voulez en savoir plus, allez voir la documentation Docker Compose. N'oubliez pas de relancer Docker pour prendre les changer en compte en stoppant le terminal dans lequel tourne Docker en faisant CTRL+C ou si vous l'avez lancé avec le daemon (-d), avec la commande docker compose down.