container - mysql docker connect
¿Cómo conectar mysql workbench a ejecutar mysql dentro de Docker? (3)
Obtuve una solución para esto estableciendo el valor del campo en Nombre de host: 127.0.0.1 (Localhost), puerto por defecto 3306 con sus creds.
Estoy usando el servidor mysql dentro del contenedor acoplable y puedo acceder al acoplador acoplable. Cómo crear una conexión en mysql workbench ejecutándose en mi local (máquina host).
2 condiciones relacionadas con el docker:
primero, la ejecución de su acoplador debe asignar el puerto mysql a un puerto de host:
docker run -p host:container
(por ejemplo: docker run -d -p 3306:3306 tutum/mysql
)
en segundo lugar, si está utilizando el docker en una máquina virtual (docker-machine, con boot2docker), debe usar la ip de
docker-machine ip <VMname>
, con el puerto mapeado del host.http://$(docker-machine ip <VMname>):hostPort
Si necesita usar localhost
, necesitaría hacer un reenvío de puertos en el nivel 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 se está ejecutando, modifyvm
es la máquina virtual está detenida) (reemplace " boot2docker-vm
" por el nombre de su vm: vea docker-machine ls
)
2 condiciones relacionadas con mysql:
Como se ilustra en
nkratzke/EasyMySQL/Dockerfile
, debe habilitar el acceso remoto:# 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
Necesita crear usuarios al iniciar su base de datos en la imagen de su ventana acoplable.
Ver por ejemplonkratzke/EasyMySQL/start-database.sh
, que es llamado porDockerfile 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"
Tienes que hacer pocas configuraciones en tu contenedor acoplable. Por favor, siga los siguientes pasos.
Especifique el bloque de configuración de mysql en su docker-compose.yml. Tengo el siguiente bloque mysql en el objeto services en mi archivo 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
Reinicie el contenedor del docker y ejecute los siguientes comandos para llegar al shell bash en el contenedor mysql
docker ps docker exec -it <mysql container name> /bin/bash
Dentro del contenedor, para conectarse al tipo de línea de comando mysql,
mysql -u root -p
Use MYSQL_ROOT_PASSWORD como se especifica en docker-compose.yml. Ejecute los siguientes comandos para crear un nuevo usuario.
create user ''user''@''%'' identified by ''pass''; grant all privileges on *.* to ''user''@''%'' with grant option; flush privileges;
El signo de porcentaje (%) significa todas las ip. Reinicie el contenedor de docker.
En su MySQL Workbench, proporcione los detalles de la conexión. Use MYSQL_PASSWORD como se especifica en su archivo docker-compose.yml.
Ahora debería poder conectarse a su contenedor mysql.