【问题标题】:Unable to connect to MySQL database in docker container无法连接到 docker 容器中的 MySQL 数据库
【发布时间】:2020-03-12 08:52:48
【问题描述】:

我真的厌倦了这个。我已经尝试了所有可能的解决方案,但它仍然拒绝连接。

这是我的 docker-compose 文件:

version: '3'

services:
  # Database
  db:
    image: mysql:5.7
    container_name: db
    restart: always
    env_file: .env
    environment:
      - MYSQL_ROOT_HOST=%
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=$MYSQL_DATABASE
      - MYSQL_USER=$MYSQL_USER
      - MYSQL_PASSWORD=$MYSQL_PASSWORD
    networks:
      - backend
  # Wordpress
  wp:
    depends_on:
      - db
    image: wordpress:php7.3-fpm
    container_name: wordpress
    restart: always
    env_file: .env
    environment:
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=$MYSQL_USER
      - WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
      - WORDPRESS_DB_NAME=$MYSQL_DATABASE
    volumes:
      - ./wordpress:/var/www/html
    networks:
      - backend
  # Nginx
  nginx:
    depends_on:
      - wp
    image: nginx
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./wordpress:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
    networks:
      - backend

networks:
  backend:
    driver: bridge

我试过 127.0.0.1, 0.0.0.0, db, docker inspect db 来获取容器的 IP 地址。他们都无法连接。我使用过 Sequel Pro、MySQL Workbench 和 DataGrip。

设置完全正常。只是我无法连接到容器外的数据库。

我什至检查了容器中的mysql主机权限并得到:

% root

% wordpress (name of the user I created)

...

我错过了什么吗?

【问题讨论】:

    标签: mysql wordpress docker nginx docker-compose


    【解决方案1】:

    为了使用 sql 客户端从主机访问您的数据库,您需要将 MYSQL 数据库端口映射到主机。

    在您的 Compose 文件中,将端口映射添加到您的数据库服务。

    db: 
      ...
      ports:
        - "3306:3306"
    

    我相信您使用的是基于您的 Wordpress 服务的默认端口。

    然后将您的 SQL 客户端配置为 127.0.0.1 和端口 3306。

    【讨论】:

    • 谢谢!拯救了我的一天。 Sequel 不适用于 mysql 8,但 DataGrip 运行良好。谢谢!
    【解决方案2】:

    MYSQL 更改

    • c:\programdata\mysql\mysql 服务器 8.0 中的 MY.ini 更改 添加Bind_address=0.0.0.0

    • 另存为管理员 - 检查时间戳

    • 创建一个应用程序用户 - 不要为应用程序使用 mysql Root 用户

    drop user 'username'@localhost;
    FLUSH PRIVILEGES;
    CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
    CREATE USER 'username'@'%' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    • 重启 MYSQL 服务器
    • 重启 Docker for Windows
    • 检查 C:\Windows\System32\drivers\etc 中的 Hosts 文件是否正确更新了 host.docker.internal 变量
    # Added by Docker Desktop
    10.0.0.6 host.docker.internal
    10.0.0.6 gateway.docker.internal
    

    应用变更:

    app.properties 中 JDBC URL 中的用户 host.docker.internal

    spring.datasource.url=jdbc:mysql://host.docker.internal:3306/test
    spring.datasource.username=username
    spring.datasource.password=password
    

    maven install 应该可以工作

    docker run <repo/repo>:image 应该可以正常工作。现在

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2022-11-30
      • 2020-09-05
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 2021-04-05
      相关资源
      最近更新 更多