web-dev-qa-db-fra.com

Comment connecter mysql workbench à l'exécution de mysql dans docker?

J'utilise le serveur mysql dans le conteneur Docker et je peux accéder au menu Docker. Comment créer une connexion dans mysql workbench s'exécutant sur mon ordinateur local (machine hôte). 

23
Pawan Kumar

Vous devez faire peu de configuration dans votre conteneur docker. Veuillez suivre les étapes suivantes. 

  1. Spécifiez le bloc de configuration mysql dans votre fichier docker-compose.yml. J'ai le bloc mysql suivant sous l'objet services dans mon fichier docker-compose.yml.

    services:
        db:
            image: mysql
            volumes:
                - "./.data/db:/var/lib/mysql"
            environment:
                MYSQL_ROOT_PASSWORD: root
                MYSQL_DATABASE: mydb
                MYSQL_USER: user
                MYSQL_PASSWORD: pass
            ports:
                42333:3306
    
  2. Redémarrez le conteneur Docker et exécutez les commandes suivantes pour accéder au shell bash dans le conteneur mysql

    docker ps
    docker exec -it <mysql container name> /bin/bash 
    

    Dans le conteneur, pour se connecter au type de ligne de commande mysql,

    mysql -u root -p
    

    Utilisez MYSQL_ROOT_PASSWORD comme spécifié dans le fichier docker-compose.yml. Exécutez les commandes suivantes pour créer un nouvel utilisateur.

    create user 'user'@'%' identified by 'pass';
    grant all privileges on *.* to 'user'@'%' with grant option;
    flush privileges;
    

    Le signe de pourcentage (%) désigne toutes les adresses IP. Redémarrez le conteneur de menu fixe.

  3. Dans votre MySQL Workbench, fournissez les détails de la connexion. Utilisez MYSQL_PASSWORD comme spécifié dans votre fichier docker-compose.yml. 

     enter image description here

Vous devriez maintenant pouvoir vous connecter à votre conteneur mysql. 

15
Krishna

2 conditions liées au docker: 

  • tout d’abord, votre docker doit mapper le port mysql sur un port hôte: 

    docker run -p Host:container
    

(par exemple: docker run -d -p 3306:3306 tutum/mysql)

  • deuxièmement, si vous utilisez le menu fixe dans une VM (poste fixe, avec boot2docker), vous devez utiliser l'ip de docker-machine ip <VMname>, avec le port mappé de l'hôte.

    http://$(docker-machine ip <VMname>):hostPort
    

Si vous devez utiliser localhost, vous devrez faire un transfert de port au niveau de VirtualBox :

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306"
VBoxManage controlvm "boot2docker-vm" natpf1 "udp-port3306,udp,,3306,,$3306"

(controlvm si la VM est en cours d'exécution, modifyvm est la VM est arrêtée) .__ (remplacez "boot2docker-vm" par le nom de votre vm: voir docker-machine ls


2 conditions liées à mysql:

  • Comme illustré dans nkratzke/EasyMySQL/Dockerfile , vous devez activer l'accès à distance:

    # Enable remote access (default is localhost only, we change this
    # otherwise our database would not be reachable from outside the container)
    RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
    
  • Vous devez créer des utilisateurs lorsque vous démarrez votre base de données dans votre image de menu fixe.
    Voir par exemple nkratzke/EasyMySQL/start-database.sh , appelé par le Dockerfile CMD :

    /usr/sbin/mysqld &
    sleep 5
    echo "Creating user"
    echo "CREATE USER '$user' IDENTIFIED BY '$password'" | mysql --default-character-set=utf8
    echo "REVOKE ALL PRIVILEGES ON *.* FROM '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "GRANT SELECT ON *.* TO '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8
    echo "finished"
    
13
VonC

Par défaut, après le déploiement, MySQL est soumis aux restrictions de connexion suivantes:

mysql> select Host, user from mysql.user;
+-----------+---------------+
| Host      | user          |
+-----------+---------------+
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
4 rows in set (0.00 sec)

Apparemment, pour des raisons de sécurité, vous ne pourrez pas vous y connecter en dehors de l'image du menu fixe. Si vous devez le modifier pour permettre à root de se connecter à partir de n'importe quel hôte (par exemple, à des fins de développement), faites:

  1. Démarrez votre image mysql avec tous les mappages de ports requis:

    docker run -p 3306:3306 --name=mysql57 -d mysql/mysql-server:5.7

ou, si le mappage de port complet est requis:

docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
  1. S'il s'agit d'une nouvelle installation, saisissez le mot de passe par défaut:

    docker logs mysql57 2>&1 | grep GENERATED

  2. Connectez-vous en utilisant le client mysql directement au mysqld in docker:

    docker exec -it mysql57 mysql -uroot -p

  3. S'il s'agit de la nouvelle installation, il vous sera demandé de changer le mot de passe à l'aide de la commande ALTER USER. Fais le.

  4. Exécuter SQL:

    update mysql.user set Host = '%' where user='root';

  5. Quittez le client mysql.

  6. Redémarrez le conteneur:

    docker restart mysql57

Maintenant, vous pourrez vous connecter depuis MySQL Workbench à

Host: `0.0.0.0` 
port: `3306`

Après tous les changements, la requête affichera:

select Host, user from mysql.user;
+-----------+---------------+
| Host      | user          |
+-----------+---------------+
| %         | root          |
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
+-----------+---------------+
5
Andrey Lebedenko

Supposons que vous ayez le contenu suivant de votre fichier docker-compose:

database: image: mysql:5.6 volumes: - dbdata:/var/lib/mysql environment: - "MYSQL_DATABASE=Homestead" - "MYSQL_USER=Homestead" - "MYSQL_PASSWORD=secret" - "MYSQL_ROOT_PASSWORD=secret" ports: - "33061:3306"

Pour localhost, utilisez simplement les ports Host 127.0.0.1 et 33061  enter image description here

3
Deadpool

La réponse de @ Krishna a fonctionné mais avec une modification mineure - l'utilisateur a été ajouté comme suit

create user 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

voir Le plugin d'authentification 'caching_sha2_password' ne peut pas être chargé

2
andrew

J'ai eu la solution pour cela en définissant la valeur du champ dansHostname: 127.0.0.1 (Localhost), le port par défaut 3306 avec vos creds.

1
Pawan Kumar
  1. Spécifiez votre configuration docker-compose.yml. Plus de détails ici . Exemple:

    version: '3.1'
    
    services:
      mysql:
        image: mysql:5.6
        container_name: test-mysql
        ports:
          - 3306:3306
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: password
    
  2. Exécutez ce comandsdocker-compose up et un autre terminal exécutez docker ps pour voir votre conteneur.
  3. Accédez à votre menu fixe: docker exec -it test-mysql bash
  4. Dans le conteneur, pour vous connecter au type de ligne de commande mysql, exécutez mysql -u root -p.
  5. Créer un nouvel utilisateur
  6. Enfin, configurez votre MySQL Workbench

 enter image description here

0
DNick

J'ai suivi les instructions affichées dans mysql docker hub . Écrit ce docker-compose.yml

version: '3.1'

services:
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: example
    ports:
      - 3306:3306

Allez dans mysql workbench lorsque vous établissez une connexion, assurez-vous de supprimer le mot de passe dans les paramètres. maintenant, entrez le mot de passe (dans mon cas, example)

0
user5848619