插件窝 干货文章 docker的mysql怎么连接外部

docker的mysql怎么连接外部

MySQL 连接 Docker 容器 58    来源:    2025-04-06

连接外部MySQL数据库到Docker容器

要在Docker容器中连接外部MySQL数据库,有几种不同的方法。以下是详细的解决方案:

方法一:直接连接外部MySQL

如果你的Docker容器需要连接宿主机上的MySQL或其他网络可达的MySQL实例:

docker run --network host -e MYSQL_HOST=host.docker.internal -e MYSQL_USER=root -e MYSQL_PASSWORD=yourpassword your_image

说明:

  1. --network host:让容器使用宿主机的网络(仅适用于Linux)
  2. 对于Mac/Windows Docker Desktop,可以使用 host.docker.internal 作为主机名
  3. 确保外部MySQL允许远程连接

方法二:使用自定义网络连接

  1. 首先创建一个自定义网络:
docker network create my-network
  1. 运行你的应用容器并加入该网络:
docker run --network my-network -e MYSQL_HOST=mysql-host -e MYSQL_USER=root -e MYSQL_PASSWORD=yourpassword your_image

方法三:连接另一个Docker容器中的MySQL

  1. 首先运行MySQL容器:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
  1. 然后运行你的应用容器并链接到MySQL容器:
docker run --name some-app --link some-mysql:mysql -d your_image

确保MySQL允许远程连接

如果连接外部MySQL遇到问题,可能需要配置MySQL允许远程连接:

  1. 登录MySQL:
mysql -u root -p
  1. 执行以下SQL命令:
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
  1. 修改MySQL配置文件(通常是/etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf):
bind-address = 0.0.0.0
  1. 重启MySQL服务:
service mysql restart

连接字符串示例

在应用程序中,连接字符串通常如下:

  • Node.js:
const connection = mysql.createConnection({
  host: process.env.MYSQL_HOST || 'localhost',
  user: process.env.MYSQL_USER || 'root',
  password: process.env.MYSQL_PASSWORD || '',
  database: process.env.MYSQL_DATABASE || 'myapp'
});
  • Python:
import mysql.connector

db = mysql.connector.connect(
  host="host.docker.internal",
  user="root",
  password="yourpassword",
  database="mydatabase"
)

防火墙考虑

确保防火墙允许MySQL端口(默认3306)的入站连接:

sudo ufw allow 3306

希望这些方法能帮助你成功连接外部MySQL数据库到Docker容器。根据你的具体环境和需求选择最适合的方法。