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

docker中的mysql怎么连接

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

连接Docker中的MySQL数据库

在Docker中连接MySQL数据库有几种方法,具体取决于你的使用场景和需求。以下是详细的连接方法:

1. 从宿主机连接Docker中的MySQL

基本连接步骤

  1. 确保MySQL容器正在运行

    docker ps
    
  2. 获取MySQL容器的IP地址

    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名或ID
    
  3. 使用MySQL客户端连接

    mysql -h 容器IP -P 3306 -u root -p
    

更常用的方法(端口映射)

如果启动MySQL容器时使用了端口映射(如 -p 3306:3306),可以直接连接本地端口:

mysql -h 127.0.0.1 -P 3306 -u root -p

2. 从另一个Docker容器连接MySQL

使用Docker网络

  1. 创建自定义网络

    docker network create my-network
    
  2. 启动MySQL容器并加入网络

    docker run --name mysql-container --network my-network -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
    
  3. 从另一个容器连接

    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

3. 常用MySQL容器启动命令

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

4. 使用Docker Compose

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:

5. 常见问题解决

  1. 认证插件问题: 如果遇到 caching_sha2_password 错误,启动容器时添加:

    --default-authentication-plugin=mysql_native_password
    
  2. 连接被拒绝

    • 检查MySQL容器是否正在运行
    • 检查端口映射是否正确
    • 检查防火墙设置
  3. 时区问题: 启动时添加 -e TZ=Asia/Shanghai 参数

  4. 持久化数据: 使用 -v /my/own/datadir:/var/lib/mysql 挂载数据卷

通过以上方法,你应该能够成功连接Docker中的MySQL数据库。根据你的具体需求选择最适合的连接方式。