J'essaie d'installer mysql dans un conteneur de menu fixe, j'ai essayé diverses images de github, il semble qu'ils aient tous réussi à installer correctement mysql, mais lorsque j'essaie de l'exécuter, une erreur s'est produite:
ERREUR 2002 (HY000): Impossible de se connecter au serveur MySQL local via le socket '/var/run/mysqld/mysqld.sock'
Spécifications du système:
Les paquets que j'ai essayés jusqu'à présent:
N'oubliez pas que vous devrez vous connecter au conteneur docker en cours d'exécution. Donc, vous voudrez probablement utiliser tcp au lieu d’un socket. Vérifiez le résultat de la commande docker ps
et recherchez les conteneurs mysql en cours d'exécution. Si vous en trouvez un, utilisez la commande mysql comme ceci: mysql -h 127.0.0.1 -P <mysql_port>
(vous trouverez le port dans docker ps
sortie) . Si vous ne trouvez aucun conteneur mysql actif dans docker ps
sortie, essayez docker images
pour trouver le nom d'image mysql et essayez quelque chose comme ceci pour l'exécuter: docker run -d -p 3306:3306 tutum/mysql
où "tutum/mysql" est le nom d'image trouvé dans docker images
.
J'ai eu le même problème, en fait, j'ai juste oublié de lancer le service après l'installation ..
Démarrez le serveur mysql:
/etc/init.d/mysql start
Je ne sais pas comment y parvenir, mais je peux atteindre MYSQL en tapant
$ mysql -u root -h
mywebsite:
image: benftwc/pldev-webserver
volumes:
- ./mywebsite.fr/:/var/www/
working_dir: /var/www/
ports:
- "8009:8009"
command: php -S 0.0.0.0:8009
links:
- database
database:
image: library/mysql
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3310:3306
root@422f4d1f454a:/# mysql -u root -h 127.0.0.1 -p3310
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
root@422f4d1f454a:/# mysql -u root -h database -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g...........
Si MySQL n'est pas installé sur votre hôte, vous devez l'exécuter dans le conteneur ( https://docs.docker.com/engine/reference/commandline/exec/#/examples donne des explications sur docker run vs _ {docker exec).
Étant donné que votre conteneur est en cours d’exécution, vous pouvez utiliser
docker exec yourcontainername mysql -u root -p
pour accéder au client.
De plus, si vous utilisez Docker Compose et que vous avez déclaré une base de données mysql nommée base de données, vous pouvez utiliser:
docker-compose exec database mysql -u root -p
Quelques mois après cette question, j'ai amélioré mes compétences dans Docker. Je devrais utiliser le nom du conteneur Docker à la place.
Cela utilise dokerized-nginx comme pont pour exposer ip + port du conteneur.
Dans la configuration WEB, j'utilise maintenant mysql://USERNAME:PASSWORD@docker_container_name/DB_NAME
pour accéder au socket Mysql via le menu fixe (fonctionne également avec docker-compose, utilisez nom-composition au lieu d'un conteneur).
Découvrez ce qui est dans votre fichier database.yml
. Si vous avez déjà votre application Plain Rails et l'enveloppez simplement avec Docker, vous devez modifier (à l'intérieur de database.yml
):
socket: /var/run/mysqld/mysqld.sock #just comment it out
à
Host: db
où db
est le nom de mon service de base de données de docker-compose.yml
. Et voici mon docker-compose.yml
:
version: '3'
services:
web:
build: .
command: bundle exec Rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
links:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
Vous démarrez votre application dans la console (dans le dossier de l'application) en tant que docker-compose up
. Puis WAIT 1 MINUTE (laissez votre service mysql se charger complètement) jusqu'à ce que de nouveaux journaux n'apparaissent plus dans la console. Habituellement, la dernière ligne devrait être comme
db_1 | 2017-12-24T12: 25: 20.397174Z 0 [Note] Fin de la liste de tables partitionnées de manière non native
Puis (dans une nouvelle fenêtre de terminal), appliquez:
docker-compose run web rake db:create
et alors
docker-compose run web rake db:migrate
Une fois votre travail terminé, arrêtez les images chargées avec
docker-compose stop
N'utilisez pas docker-compose down
ici, car si vous le faites, vous effacerez le contenu de votre base de données.
La prochaine fois que vous souhaitez reprendre votre travail, appliquez:
docker-compose start
Le reste des choses se fait exactement comme expliqué ici: https://docs.docker.com/compose/Rails/
Je pourrais être un peu en retard pour répondre et probablement le monde sait à ce sujet maintenant.
Il ne vous reste plus qu'à ouvrir vos ports de conteneur docker pour y accéder. Par exemple lors de l'exécution du conteneur:
docker run --name mysql_container -e MYSQL_ROOT_PASSWORD = root -d
-p 3306:3306
mysql/mysql-server: 5.7
Cela permettra au mysql de votre conteneur d'être accessible à partir de la machine hôte. Plus tard, vous pourrez vous y connecter.
docker exec -it mysql_container mysql -u racine -p
J'ai rencontré le même problème aujourd'hui. Essayez d'essayer de lancer ur container avec cette commande.
docker run --name mariadbtest -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypass -d mariadb/server:10.3
Pour moi, il s’agissait simplement de redémarrer le démon docker.