要从 Windows 访问运行在 WSL(Windows Subsystem for Linux)中的 Docker 容器中的 MySQL 数据库,你需要确保以下几点:
以下是详细的步骤:
假设你已经在 WSL 中安装了 Docker,并且有一个 MySQL Docker 镜像,你可以使用以下命令启动 MySQL 容器,并将容器的 MySQL 端口(默认是 3306)映射到 WSL 的端口。
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:latest
在这个命令中:
--name mysql-container
:为容器指定一个名称。-e MYSQL_ROOT_PASSWORD=my-secret-pw
:设置 MySQL root 用户的密码。-p 3306:3306
:将容器的 3306 端口映射到 WSL 的 3306 端口。-d mysql:latest
:在后台运行 MySQL 容器,使用最新的 MySQL 镜像。确保 MySQL 容器正在运行:
docker ps
你应该能看到类似以下的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xxxxxxxxxxxx mysql:latest "docker-entrypoint.s…" xx minutes ago Up xx minutes 0.0.0.0:3306->3306/tcp mysql-container
默认情况下,MySQL root 用户只能从 localhost 连接。你需要创建一个允许从外部主机连接的用户,或者修改 root 用户的权限。
docker exec -it mysql-container mysql -u root -p
输入你在启动容器时设置的 root 密码。
CREATE USER 'youruser'@'%' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON *.* TO 'youruser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'my-secret-pw';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
在 WSL 中运行以下命令获取 WSL 的 IP 地址:
hostname -I
你会得到类似 172.20.240.1
的 IP 地址。
现在,你可以从 Windows 使用 MySQL 客户端工具(如 mysql
命令行工具、MySQL Workbench 或其他数据库管理工具)连接到运行在 WSL 中的 MySQL 容器。
打开 Windows 命令提示符或 PowerShell,运行以下命令:
mysql -h <WSL_IP_ADDRESS> -P 3306 -u youruser -p
在这个命令中:
<WSL_IP_ADDRESS>
:替换为你在步骤 4 中获取的 WSL IP 地址。-P 3306
:指定端口号。-u youruser
:指定 MySQL 用户名。-p
:提示输入密码。确保 Windows 防火墙允许外部连接到 3306 端口。如果你在 WSL 中运行 Docker 容器,还需要确保 WSL 的防火墙规则允许外部访问 3306 端口。
领取专属 10元无门槛券
手把手带您无忧上云