2个小时以来,我一直感到我的MySQL容器不允许我的laravel应用程序(订单)进行连接的问题。每次尝试连接时,都会收到以下消息(来自laravel日志):
[2019-08-08 15:20:18]生产。错误:SQLSTATE [HY000] [1045]访问 拒绝用户'root'@'172.21.0.3'(使用密码:是) {“ exception”:“ [object](Doctrine \ DBAL \ Driver \ PDOException(代码: 1045):SQLSTATE [HY000] [1045]用户拒绝访问 位于'root'@'172.21.0.3'(使用密码:是) /var/www/laravel/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:31, PDOException(code:1045):SQLSTATE [HY000] [1045]拒绝访问 用户'root'@'172.21.0.3'(使用密码:是)位于 /var/www/laravel/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:27)
我没有更改配置或数据库中的任何内容。我刚刚使用docker-compose restart重新启动了所有容器。
这是我的docker-compose文件:
version: "2"
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
restart: always
networks:
- webgateway
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- dhparam:/etc/nginx/dhparam
- certs:/etc/nginx/certs
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-proxy_le
volumes_from:
- nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- webgateway
order:
container_name: order
image: e-order:latest
restart: always
volumes:
- /var/e-order/storage:/var/www/laravel/storage/app
- /var/e-order/logs:/var/www/laravel/storage/logs
networks:
- webgateway
- order_net
environment:
- VIRTUAL_HOST={URL}
- LETSENCRYPT_HOST={URL}
- LETSENCRYPT_EMAIL={MAIL}
- DB_HOST=order-db
- DB_USERNAME=root
- DB_PASSWORD={ROOT_PW}
- DB_DATABASE=e-order
- PHP_MEM_LIMIT=2048
env_file:
- /var/e-order/config/production.env
order-db:
image: mysql
container_name: order-db
restart: always
volumes:
- /var/e-order/database:/var/lib/mysql
networks:
- order_net
environment:
- MYSQL_DATABASE=e-order
- MYSQL_USER={USER}
- MYSQL_PASSWORD={PW}
- MYSQL_ROOT_PASSWORD={ROOT_PW}
networks:
webgateway:
order_net:
volumes:
conf:
vhost:
html:
dhparam:
certs:
我的生产配置文件(与“ env_file”链接):
APP_NAME=e-order
APP_ENV=production
APP_DEBUG=false
APP_URL={URL}
MIX_ENV_MODE=production
DB_CONNECTION=mysql
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=database
SESSION_DRIVER=database
SESSION_LIFETIME=120
TELESCOPE_HARDCORE=true
我已经检查了应用程序中的配置,用于创建连接的密码正确无误,并且与所述的docker-compose文件中的密码完全相同。
当我使用'docker container exec -it order-db bash'连接到mysql容器并使用注释'mysql -u root -p'并输入root密码时,我能够直接连接到mysql容器声明的docker-compose文件。
root用户的主机设置正确。这是我已经检查过的方式:
mysql> select user, host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
7 rows in set (0.00 sec)
特权也是正确的(我是说它是根用途)。
我还检查了IP地址。应用是“ 172.21.0.3”,数据库是“ 172.21.0.2”,因此我认为它们位于同一子网中,应该可以进行连接。
mysql配置中是否锁定了某些内容?还是为什么在快速重启后它不起作用?
答案 0 :(得分:0)
我已经将mysql版本从8.0降级到5.7,现在它的运行就像一个魅力。不知道为什么,但是我正在与mysql的家伙联系,以找到原因/解决方案。