Я использую сервер mysql внутри контейнера докеров и могу получить доступ к докере. Как создать соединение в mysql workbench, запущенном на моем локальном компьютере (Host Machine).
Как подключить mysql workbench к запуску mysql внутри docker?
Ответ 1
Вы должны сделать несколько настроек в вашем контейнере Docker. Пожалуйста, выполните следующие шаги.
-
Укажите блок конфигурации 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
-
Перезапустите 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. Перезапустите докер-контейнер.
-
В вашем MySQL Workbench укажите детали подключения. Используйте MYSQL_PASSWORD, как указано в файле docker-compose.yml.
Теперь вы должны иметь возможность подключиться к вашему контейнеру 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 подключаться с любого хоста (скажем, в целях разработки), выполните:
-
Запустите свой образ 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
-
Если это новая установка - захватите пароль по умолчанию:
docker logs mysql57 2>&1 | grep GENERATED
-
Подключитесь с помощью клиента
mysql
напрямую к mysqld в докере:docker exec -it mysql57 mysql -uroot -p
-
Если это новая установка, вам будет предложено изменить пароль с помощью команды
ALTER USER
. Сделай это. -
Запустите SQL:
update mysql.user set host = '%' where user='root';
-
Выйдите из клиента
mysql
. -
Перезапустите контейнер:
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
Ответ 5
Я получил решение для этого, установив значение поля в Имя хоста: 127.0.0.1 (Localhost), порт по умолчанию 3306 с вашими кредитами.
Ответ 6
@Krishna ответ сработал, но с небольшим изменением - пользователь был добавлен следующим образом
create user 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
см. Аутентификационный плагин 'caching_sha2_password' не может быть загружен
Ответ 7
-
Укажите свою конфигурацию
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
- Запустите эту команду
docker-compose up
а другой терминал запуститеdocker ps
чтобы увидеть ваш контейнер. - Доступ к вашему докеру:
docker exec -it test-mysql bash
- Внутри контейнера, чтобы подключиться к типу командной строки
mysql -u root -p
, запуститеmysql -u root -p
. - Создать нового пользователя
- Наконец, настройте свой MySQL Workbench
Ответ 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-> Сеть-> Переадресация портов".