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).
Vous devez faire peu de configuration dans votre conteneur docker. Veuillez suivre les étapes suivantes.
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
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.
Dans votre MySQL Workbench, fournissez les détails de la connexion. Utilisez MYSQL_PASSWORD comme spécifié dans votre fichier docker-compose.yml.
Vous devriez maintenant pouvoir vous connecter à votre conteneur mysql.
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"
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:
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
S'il s'agit d'une nouvelle installation, saisissez le mot de passe par défaut:
docker logs mysql57 2>&1 | grep GENERATED
Connectez-vous en utilisant le client mysql
directement au mysqld in docker:
docker exec -it mysql57 mysql -uroot -p
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.
Exécuter SQL:
update mysql.user set Host = '%' where user='root';
Quittez le client mysql
.
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 |
+-----------+---------------+
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
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é
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.
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
docker-compose up
et un autre terminal exécutez docker ps
pour voir votre conteneur.docker exec -it test-mysql bash
mysql -u root -p
.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
)