无法连接到Docker容器中的MySQL数据库

时间:2019-11-16 10:55:30

标签: mysql wordpress docker nginx docker-compose

老实说,我对此感到厌倦。我已经尝试了所有可能的解决方案,但它仍然拒绝连接。

这是我的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)

...

我想念什么吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

答案 1 :(得分:0)

MYSQL更改

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

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

  • 创建一个App用户-不要为该应用创建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 Server
  • 为Windows重新启动Docker
  • 如果host.docker.internal变量正确更新,请检查C:\ Windows \ System32 \ drivers \ etc中的Hosts文件
# 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应该可以正常工作。现在