Подтвердить что ты не робот

Как подключить mysql workbench к запуску mysql внутри docker?

Я использую сервер mysql внутри контейнера докеров и могу получить доступ к докере. Как создать соединение в mysql workbench, запущенном на моем локальном компьютере (Host Machine).

4b9b3361

Ответ 1

Вы должны сделать несколько настроек в вашем контейнере Docker. Пожалуйста, выполните следующие шаги.

  1. Укажите блок конфигурации mysql в вашем docker-compose.yml. У меня следующий блок mysql под объектом services в моем файле 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. Перезапустите Docker-контейнер и выполните следующие команды, чтобы перейти к оболочке bash в MySQL-контейнере.

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

    Внутри контейнера для подключения к типу командной строки mysql,

    mysql -u root -p
    

    Используйте MYSQL_ROOT_PASSWORD, как указано в docker-compose.yml. Выполните следующие команды, чтобы создать нового пользователя.

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

    Знак процента (%) означает все ip. Перезапустите докер-контейнер.

  3. В вашем MySQL Workbench укажите детали подключения. Используйте MYSQL_PASSWORD, как указано в файле docker-compose.yml.

    enter image description here

Теперь вы должны иметь возможность подключиться к вашему контейнеру mysql.

Ответ 2

По умолчанию после развертывания MySQL имеет следующие ограничения подключения:

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)

По всей видимости, в целях безопасности вы не сможете подключиться к нему за пределами образа докера. Если вам нужно изменить это, чтобы позволить root подключаться с любого хоста (скажем, в целях разработки), выполните:

  1. Запустите свой образ mysql со всеми необходимыми сопоставлениями портов:

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

или, если требуется полное сопоставление портов:

docker run -p 3306:3306 -p 33060:33060 --name=mysql57 -d mysql/mysql-server:5.7
  1. Если это новая установка - захватите пароль по умолчанию:

    docker logs mysql57 2>&1 | grep GENERATED

  2. Подключитесь с помощью клиента mysql напрямую к mysqld в докере:

    docker exec -it mysql57 mysql -uroot -p

  3. Если это новая установка, вам будет предложено изменить пароль с помощью команды ALTER USER. Сделай это.

  4. Запустите SQL:

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

  5. Выйдите из клиента mysql.

  6. Перезапустите контейнер:

    docker restart mysql57

Теперь вы сможете подключиться из MySQL Workbench к

host: '0.0.0.0' 
port: '3306'

После всех изменений запрос покажет:

select host, user from mysql.user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| %         | root          |
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
+-----------+---------------+

Ответ 3

2 связанных с докером условия:

  • Во-первых, ваш запуск Docker должен сопоставить порт mysql с портом хоста:

    docker run -p host:container
    

(например: docker run -d -p 3306:3306 tutum/mysql)

  • во-вторых, если вы используете docker в виртуальной машине (docker-machine, с boot2docker), вам нужно использовать ip docker-machine ip <VMname> с портом, сопоставленным хосту.

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

Если вам нужно использовать localhost, вам необходимо выполнить переадресацию портов на уровне VirtualBox:

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

(controlvm если виртуальная машина работает, modifyvm - виртуальная машина остановлена) (замените " boot2docker-vm " именем вашего vm: см. docker-machine ls)


2 связанных с MySQL условия:

  • Как показано в nkratzke/EasyMySQL/Dockerfile, вам необходимо включить удаленный доступ:

    # 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
    
  • Вам нужно создавать пользователей при старте вашей базы данных в вашем образе докера.
    Смотрите, например, nkratzke/EasyMySQL/start-database.sh, который вызывается из 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"
    

Ответ 4

Предположим, у вас есть следующее содержимое вашего файла 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"

Для локального хоста просто используйте хост 127.0.0.1 и порт 33061 enter image description here

Ответ 5

Я получил решение для этого, установив значение поля в Имя хоста: 127.0.0.1 (Localhost), порт по умолчанию 3306 с вашими кредитами.

Ответ 7

  1. Укажите свою конфигурацию docker-compose.yml. Подробнее здесь. Пример:

    version: '3.1'
    
    services:
      mysql:
        image: mysql:5.6
        container_name: test-mysql
        ports:
          - 3306:3306
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: password
    
  2. Запустите эту команду docker-compose up а другой терминал запустите docker ps чтобы увидеть ваш контейнер.
  3. Доступ к вашему докеру: docker exec -it test-mysql bash
  4. Внутри контейнера, чтобы подключиться к типу командной строки mysql -u root -p, запустите mysql -u root -p.
  5. Создать нового пользователя
  6. Наконец, настройте свой MySQL Workbench

enter image description here

Ответ 8

Я следовал инструкциям, показанным в MySQL концентратор докеров. написал этот 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

Перейдите в рабочую среду mysql, когда вы устанавливаете соединение, обязательно удалите пароль в параметрах. Теперь введите пароль (в моем случае example)

Ответ 9

Вам необходимо настроить IP-адрес хоста/гостя на 0.0.0.0 и порт хоста/гостя на 3306 в "Settings-> Сеть-> Переадресация портов".