sock container mysql docker mysql-workbench

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 ejemplo nkratzke/EasyMySQL/start-database.sh , que es llamado por 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"


Tienes que hacer pocas configuraciones en tu contenedor acoplable. Por favor, siga los siguientes pasos.

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

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

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