web-dev-qa-db-fra.com

L'installation de MySQL dans Docker échoue avec le message d'erreur "Impossible de se connecter au serveur MySQL local via un socket"

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:

  • Ubuntu 12,04 c'est sur AWS
  • Docker 0.10.0

Les paquets que j'ai essayés jusqu'à présent:

19
Mohammad

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.

37
odk

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
14
Mega

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...........
11
Ben Cassinat

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

4
Jeremy Jumeau

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).

2
Ben Cassinat

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 

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/

2
prograils

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

1
Dave Ranjan

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
0
USMAN FAZIL

Pour moi, il s’agissait simplement de redémarrer le démon docker.

0
ZiGiUs