在Docker中连接MySQL数据库有几种方法,具体取决于你的使用场景和需求。以下是详细的连接方法:
确保MySQL容器正在运行
docker ps
获取MySQL容器的IP地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名或ID
使用MySQL客户端连接
mysql -h 容器IP -P 3306 -u root -p
如果启动MySQL容器时使用了端口映射(如 -p 3306:3306
),可以直接连接本地端口:
mysql -h 127.0.0.1 -P 3306 -u root -p
创建自定义网络
docker network create my-network
启动MySQL容器并加入网络
docker run --name mysql-container --network my-network -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
从另一个容器连接
docker run -it --network my-network mysql:latest mysql -h mysql-container -u root -p
docker run --name app-container --link mysql-container:mysql -d your-app-image
docker run --name some-mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=my-database \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=password \
-p 3306:3306 \
-d mysql:latest \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
version: '3'
services:
db:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
app:
build: .
depends_on:
- db
environment:
DB_HOST: db
DB_PORT: 3306
volumes:
mysql_data:
认证插件问题:
如果遇到 caching_sha2_password
错误,启动容器时添加:
--default-authentication-plugin=mysql_native_password
连接被拒绝:
时区问题:
启动时添加 -e TZ=Asia/Shanghai
参数
持久化数据:
使用 -v /my/own/datadir:/var/lib/mysql
挂载数据卷
通过以上方法,你应该能够成功连接Docker中的MySQL数据库。根据你的具体需求选择最适合的连接方式。