Avertissement : je ne cherche pas à configurer MySQL/MariaDB pour qu'il utilise des connexions TCP. Je connais cette option et la question ne porte pas sur cet aspect.
Je n'arrive pas à lier un fichier socket à l'intérieur d'un conteneur au système de fichiers de l'hôte. Je m'attendais à ce qu'une simple entrée docker-compose comme celle-ci fonctionne :
volumes:
- /srv/docker/sockets/mariadb.container.sock:/var/run/mysqld/mysqld.sock
Mais cela n'a pas fonctionné. Au lieu de cela, j'ai reçu les messages d'erreur suivants :
its_sql_dev | 190305 10:31:23 [ERROR] Can't start server : Bind on unix socket: Address already in use
its_sql_dev | 190305 10:31:23 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
L'état du fichier dans le système hôte ne semble pas avoir d'importance - qu'il ait déjà existé, qu'il ait existé avec a+rwx
ou n'existait pas du tout ne semble pas avoir d'incidence sur le démarrage du conteneur.
Le résultat final dans le système de fichiers de l'hôte est peut-être le plus déconcertant :
[user@server mariadb]# ls -alsh /srv/docker/shared/
total 16K
4.0K drwxrwxrwx 4 root root 4.0K Mar 5 11:31 .
4.0K drwxr-xr-x 7 root root 4.0K Mar 1 13:09 ..
4.0K drwxr-xr-x 2 root root 4.0K Mar 5 11:31 mariadb.container.sock
Il s'est avéré que le fichier .sock s'est transformé en un répertoire (vide) sur l'hôte !
J'ai eu un peu plus de chance en déplaçant le fichier socket dans son propre répertoire et en montant ce répertoire sur l'hôte, dans ce cas cela fonctionnerait une fois, mais pas après un redémarrage du conteneur.