php - 拒绝访问 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'@'%'
解决方案
您可能忘记在您的第二个站点中使用正确的 MySQL 主机。
推荐阅读
- java - 我有两个列表,我想根据 groovy 或 java 中其他列表中存在的 id 过滤列表
- xml - XSLT 在 for-each 的同一级别获取节点
- gf - 应用 Predef.eqStr:需要一个字符串类型的值
- android - 为什么颤振应用程序的启动屏幕或启动屏幕图像没有以高质量显示
- python-3.x - 你好!我需要帮助至日期时间
- python - 如果在运行 python 脚本之前打开了串行端口,我该如何关闭它?
- google-calendar-api - 服务帐户无法在 laravel PHP 中的日历 API 上没有全域授权委托的情况下邀请与会者
- leaflet - 传单markerclusterGroup layerGroup
- ruby-on-rails - 无法从本地计算机在远程服务器上运行捆绑命令
- angular - 在 Angular/Firestore 中使用 Stripe 支付