如何将mysql工作台连接到docker中运行mysql?
我在泊坞窗容器内使用mysql服务器,并能够访问泊坞内。 如何在我的本地(主机)上运行的mysql工作台上创build连接。
2docker相关条件:
-
首先,您的docker运行必须将mysql端口映射到主机端口:
docker run -p host:container
(例如: docker run -d -p 3306:3306 tutum/mysql
)
-
第二,如果你在一个虚拟机(docker-machine,使用boot2docker)中使用docker,你需要使用
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"
(如果虚拟机正在运行, modifyvm
controlvm
, modifyvm
为虚拟机已停止)(将虚拟机的名称replace为“ boot2docker-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
-
在Docker镜像中启动数据库时,您需要创build用户。
例如,请参阅由Dockerfile CMD
调用的nkratzke/EasyMySQL/start-database.sh
:/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"
您必须在Docker容器中进行less量configuration。 请按照以下步骤。
-
在你的docker-compose.yml中指定mysqlconfiguration块。 我有我的docker-compose.yml文件中的服务对象下面的mysql块。
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容器并运行下面的命令到达mysql容器中的bash shell
docker ps docker exec -it <mysql container name> /bin/bash
在容器里面,连接到mysql的命令行types,
mysql -u root -p
使用docker -compose.yml中指定的MYSQL_ROOT_PASSWORD。 执行以下命令来创build新用户。
create user 'user'@'%' identified by 'pass'; grant all privileges on *.* to 'user'@'%' with grant option; flush privileges;
百分号(%)表示所有的ip。 重新启动泊坞窗容器。
-
在您的MySQL Workbench中提供连接详细信息。 使用您的docker-compose.yml文件中指定的MYSQL_PASSWORD。
你现在应该可以连接到你的mysql容器。
我通过在Hostname:127.0.0.1 (Localhost)中设置字段值来解决这个问题,默认端口为3306。