Paw*_*mar 36 mysql mysql-workbench docker
我在docker容器内使用mysql服务器,并且能够访问docker内部.如何在我的本地(主机)上运行的mysql工作台中创建连接.
Kri*_*hna 22
您必须在docker容器中进行一些配置.请按照以下步骤操作.
在docker-compose.yml中指定mysql配置块.我在docker-compose.yml文件中的services对象下面有以下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
Run Code Online (Sandbox Code Playgroud)重新启动docker容器并运行以下命令以访问mysql容器中的bash shell
docker ps
docker exec -it <mysql container name> /bin/bash
Run Code Online (Sandbox Code Playgroud)
在容器内部,要连接到mysql命令行类型,
mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
使用docker -compose.yml中指定的MYSQL_ROOT_PASSWORD.执行以下命令以创建新用户.
create user 'user'@'%' identified by 'pass';
grant all privileges on *.* to 'user'@'%' with grant option;
flush privileges;
Run Code Online (Sandbox Code Playgroud)
百分号(%)表示所有ip.重新启动docker容器.
在MySQL Workbench中提供连接详细信息.使用docker -compose.yml文件中指定的MYSQL_PASSWORD.
您现在应该能够连接到您的mysql容器.
And*_*nko 20
默认情况下,部署后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)
Run Code Online (Sandbox Code Playgroud)
显然,出于安全目的,您将无法在docker镜像之外连接到它.如果您需要更改它以允许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
Run Code Online (Sandbox Code Playgroud)
如果这是全新安装 - 获取默认密码:
docker logs mysql57 2>&1 | grep GENERATED
使用mysql客户端直接连接到docker中的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`
Run Code Online (Sandbox Code Playgroud)
完成所有更改后,查询将显示:
select host, user from mysql.user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | root |
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+---------------+
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 14
2个与泊坞有关的条件:
首先,您的docker run必须将mysql端口映射到主机端口:
docker run -p host:container
Run Code Online (Sandbox Code Playgroud)(例如:docker run -d -p 3306:3306 tutum/mysql)
第二,如果你在VM(docker-machine,boot2docker)中使用docker,你需要使用docker-machine ip <VMname>带有主机映射端口的ip .
http://$(docker-machine ip <VMname>):hostPort
Run Code Online (Sandbox Code Playgroud)如果需要使用localhost,则需要在VirtualBox级别进行一些端口转发:
VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306"
VBoxManage controlvm "boot2docker-vm" natpf1 "udp-port3306,udp,,3306,,$3306"
Run Code Online (Sandbox Code Playgroud)
(controlvm如果VM正在运行,modifyvm则虚拟机已停止)(替换" 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
Run Code Online (Sandbox Code Playgroud)您需要在docker镜像中启动数据库时创建用户.
例如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"
Run Code Online (Sandbox Code Playgroud)Sha*_*yar 12
我试图连接,Mysql Workbench但它不允许我。结果我忘了提port。以下是运行然后从工作台连接的完整命令:
docker run --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -e MYSQL_USER=admin -e MYSQL_PASSWORD=root -d mysql:8.0.20
Run Code Online (Sandbox Code Playgroud)
上述命令的解释:
Mysql v8.0.20(镜像名称)
mysql:8.0.20
Run Code Online (Sandbox Code Playgroud)
作为独立容器运行(ctrl + c 不会停止容器)
-d
Run Code Online (Sandbox Code Playgroud)
集装箱名称
--name mysql8
Run Code Online (Sandbox Code Playgroud)
端口暴露(external port on host machine : internal port of the container)
-p 3306:3306
Run Code Online (Sandbox Code Playgroud)
设置环境变量
-e MYSQL_ROOT_PASSWORD=root
-e MYSQL_DATABASE=testdb
-e MYSQL_USER=admin
-e MYSQL_PASSWORD=root
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式查看容器的实时日志-f means follow:
docker logs mysql8 -f
Run Code Online (Sandbox Code Playgroud)
host: localhost
port: 3306
user: admin
password: root
Run Code Online (Sandbox Code Playgroud)
假设您有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端口

我找到了一个视频,展示了另一种实现此功能的方法。您可以在传入端口号时指定 IP 地址。也就是说,类似的东西-p 127.0.0.1:3307:3306不仅仅是-p 3307:3306 我以前从未见过
https://www.youtube.com/watch?v=20om-9Gwuc0#t=7m
启动命令示例
docker run -d -e MYSQL_ROOT_PASSWORD=test --name mysql8 -p 127.0.0.1:3307:3306 mysql:8
Run Code Online (Sandbox Code Playgroud)
然后我就可以使用 MYSQL Workbench 连接到127.0.0.1port 3307。

| 归档时间: |
|
| 查看次数: |
41576 次 |
| 最近记录: |