如何在Windows Docker Desktop中让Ubuntu容器连接并操作MySQL容器?
Docker中Ubuntu容器连接MySQL容器的实现方案
基础准备
- 给Ubuntu容器安装MySQL客户端:进入Ubuntu容器后执行
apt update && apt install -y mysql-client - 确保MySQL容器中已存在
myTestDB数据库(可以启动容器时通过环境变量自动创建,省去手动操作)
方法一:利用Docker默认Bridge网络(简单快捷)
Docker默认会将所有容器加入bridge网络,容器之间可以通过容器名称直接通信:
- 启动MySQL容器时,指定容器名、密码并自动创建目标数据库:
docker run -d --name mySQLContainer -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=myTestDB mysql:latest - 修改你的脚本:
- 去掉
sudo(容器内默认以root身份操作,无需sudo) - 将
-h localhost替换为-h mySQLContainer(用MySQL容器名作为主机地址)
修改后的脚本:
#!/bin/bash # MAIN test=$(mysql -h mySQLContainer -uroot -proot myTestDB<<END CREATE TABLE test_table (id int, text varchar(64)); END ) echo $test - 去掉
- 在Ubuntu容器中给脚本添加执行权限并运行:
chmod +x your_script.sh ./your_script.sh
方法二:创建自定义Docker网络(更稳定,适合多容器场景)
如果默认网络存在通信问题,可以创建专属网络隔离容器:
- 创建自定义网络:
docker network create my-docker-net - 启动MySQL容器时加入该网络:
docker run -d --name mySQLContainer --network my-docker-net -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=myTestDB mysql:latest - 启动Ubuntu容器时也加入同一网络:
docker run -itd --name myUbuntu --network my-docker-net ubuntu:latest - 后续脚本修改和运行步骤和方法一完全一致
关键注意事项
- MySQL默认限制root用户仅本地连接,需要手动授权:
进入MySQL容器执行以下操作:docker exec -it mySQLContainer bash mysql -uroot -proot ALTER USER 'root'@'%' IDENTIFIED BY 'root'; FLUSH PRIVILEGES; exit - 脚本中明文写密码存在安全风险,测试场景可临时使用,生产环境建议改用MySQL配置文件或环境变量传递密码
内容的提问来源于stack exchange,提问作者Aditya Prakash
相关产品推荐
相关产品推荐

