我是第一次尝试 Docker。启动并运行了 LEMP 堆栈,但我无法连接到 MYSQL 数据库。不在我的 Symfony 应用程序上,不在 PHPMyAdmin 上。应用程序返回以下错误代码:
驱动程序发生异常:SQLSTATE[HY000] [2002] Connection denied
这是我的 docker-compose.yml:
nginx:
image: tutum/nginx
ports:
- "80:80"
links:
- phpfpm
volumes:
- ./nginx/default:/etc/nginx/sites-available/default
- ./nginx/default:/etc/nginx/sites-enabled/default
- ./logs/nginx-error.log:/var/log/nginx/error.log
- ./logs/nginx-access.log:/var/log/nginx/access.log
phpfpm:
build: phpfpm/
ports:
- "9000:9000"
volumes:
- ./public:/usr/share/nginx/html
mysql:
image: mariadb
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: admin
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
links:
- mysql
ports:
- 8183:80
environment:
MYSQL_USERNAME: admin
MYSQL_ROOT_PASSWORD: admin
PMA_ARBITRARY: 1
Dockerfile PHPFPM:
FROM php:fpm
RUN docker-php-ext-enable opcache
RUN apt-get update \
&& apt-get install -y --no-install-recommends libpq-dev \
&& docker-php-ext-install mysqli pdo_pgsql pdo_mysql
GitHub 网址: https ://github.com/MolengraafFrank/DockerSymfony
有人可以帮我吗?感谢您的时间。
原文由 Frank Millc 发布,翻译遵循 CC BY-SA 4.0 许可协议
‘[2002] Connection denied’ 意味着您可以访问数据库服务器,但您没有用户(在您的情况下为管理员)的正确访问权限。默认情况下,mariadb 有一个 root 用户,密码由 MYSQL_ROOT_PASSWORD 给出,该用户可以从任何服务器 (%) 连接。
如果您想使用过度登录到您的数据库,您必须在数据库服务器中创建它,并从所选位置授予数据库权限。
这里的问题是您将数据库服务器命名为“mysql”(docker-compose 文件中的服务名称)。但默认情况下,phpmyadmin 会尝试连接到名为“db”的数据库服务器。在 phpmyadmin 服务的环境部分下添加
PMA_HOST: mysql
将解决此问题。我认为 MYSQL_USERNAME 和 PMA_ARBITRARY 如果您使用默认配置(使用 root 连接到您的数据库服务器)是无用的