首页 > 解决方案 > 拒绝访问 Docker 中的 MySQL 数据库

问题描述

我的 Docker (v.2)docker-compose.yml文件有 2 个 Ubuntu 映像和 2 个 MariaDB 映像:

app:
    container_name: app
    image:php-apache-dev:ubuntu-16.04
    links:
      - mysql
    depends_on:
      - mysql
    ports:
      - '8443:443'
    volumes:
      - .:/app
    environment:
      docker: 'true'
      PHP_DEBUGGER: 'xdebug'
      WEB_DOCUMENT_ROOT: '/app/public'
      WEB_NO_CACHE_PATTERN: '\.(.*)$$'
      working_dir: '/app'
      CONF_FILE: 'conf/local/develop.php'
  test:
      container_name: test
      image:php-apache-dev:ubuntu-16.04
      links:
        - mysql_test
      depends_on:
        - mysql_test
      ports:
        - '8444:443'
      volumes:
        - .:/app
      environment:
        docker: 'true'
        WEB_DOCUMENT_ROOT: '/app/public'
        WEB_NO_CACHE_PATTERN: '\.(.*)$$'
        working_dir: '/app'
        CONF_FILE: 'conf/local/test.php'
  mysql:
    image: mariadb:latest
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: 'dev'
      MYSQL_DATABASE: 'dev'
      MYSQL_USER: 'dev'
      MYSQL_PASSWORD: 'dev'
  mysql_test:
    image: mariadb:latest
    ports:
      - '3307:3306'
    environment:
      MYSQL_ROOT_PASSWORD: 'dev'
      MYSQL_DATABASE: 'dev_test'
      MYSQL_USER: 'dev'
      MYSQL_PASSWORD: 'dev'

一种用于开发,一种用于测试。当我访问第一个(on localhost:4443)时,它可以工作。当我访问第二个(打开localhost:4444)时,我可以查看该网站,但它拒绝用户访问:

用户 'dev'@'%' 拒绝访问数据库 'dev_test'

我对第二个站点的配置设置为访问第二个 MySQL 端口/用户:

'db_port'             => env('DB_PORT', '3307'),
'db_name'             => env('DB_NAME', 'dev_test'),

我尝试了这个问题的答案,但没有成功。如果我docker exec bash进入测试数据库映像并运行SHOW GRANTS FOR dev,它会说:

GRANT ALL PRIVILEGES ON `dev_test`.* TO 'dev'@'%'

标签: phpmysqldockerdocker-compose

解决方案


您可能忘记在您的第二个站点中使用正确的 MySQL 主机。


推荐阅读