要在Docker容器中连接外部MySQL数据库,有几种不同的方法。以下是详细的解决方案:
如果你的Docker容器需要连接宿主机上的MySQL或其他网络可达的MySQL实例:
docker run --network host -e MYSQL_HOST=host.docker.internal -e MYSQL_USER=root -e MYSQL_PASSWORD=yourpassword your_image
--network host
:让容器使用宿主机的网络(仅适用于Linux)host.docker.internal
作为主机名docker network create my-network
docker run --network my-network -e MYSQL_HOST=mysql-host -e MYSQL_USER=root -e MYSQL_PASSWORD=yourpassword your_image
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker run --name some-app --link some-mysql:mysql -d your_image
如果连接外部MySQL遇到问题,可能需要配置MySQL允许远程连接:
mysql -u root -p
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
/etc/mysql/my.cnf
或/etc/mysql/mysql.conf.d/mysqld.cnf
):bind-address = 0.0.0.0
service mysql restart
在应用程序中,连接字符串通常如下:
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'
});
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容器。根据你的具体环境和需求选择最适合的方法。