Docker/WSL/Symfony/MySQLSTATE[HY000][2002]连接被拒绝



我正在使用WSL2,并试图通过我的docker应用程序容器(Symfony 4.4(连接到我的MySQL数据库。其他关于这个主题的帖子并没有帮助我找到解决方案,这就是我现在问你的原因。不要犹豫,请让我添加其他文件,这可以帮助我们获得更多关于这个问题的信息。

所有的容器表面上运行良好(此处详细信息(。

然后,我使用docker exec -it app-backend-fairfair bash进入我的应用程序容器,并成功运行composer install。它运行良好(详细信息请点击此处(。

最后,我运行了php bin/console doctrine:database:create,但即使我有完全的数据库访问权限,它也不会起作用。通过localhost:8801上的Adminer,我仍然会收到SQLSTATE[HY000] [2002] Connection refused错误。此处显示完整的错误消息。


使用的文件

这是我的docker.env文件:

SERVER_PORT=8080
ADMINER_PORT=8081
# name and group of your user
HOST_USER=shamzic
# Path to store data in your machine
MYSQL_VOLUME=/var/docker-volume/fairfair/database
# Password for root user
MYSQL_ROOT_PASSWORD=root

env symfony容器文件内部:

...
DATABASE_URL=mysql://root:root@db:3306/main
...

docker-compose.yaml文件:

version: '3.2'
services:
app-backend-fairfair:
build:
context: .
dockerfile: app.dockerfile
args:
USER: ${HOST_USER}
volumes:
- '../../:/usr/src/backend-fairfair'
networks:
- app-backend-fairfair
- db
restart: on-failure
container_name: app-backend-fairfair
server-backend-fairfair:
build:
context: .
dockerfile: server.dockerfile
networks:
- app-backend-fairfair
ports:
- ${SERVER_PORT}:80
restart: on-failure
depends_on:
- app-backend-fairfair
container_name: server-backend-fairfair
db:
image: mysql:8.0
build:
context: .
dockerfile: database.dockerfile
volumes:
- ${MYSQL_VOLUME}:/var/lib/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_HOST: '%'
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
networks:
- db
restart: on-failure
container_name: db
adminer:
build:
context: .
dockerfile: adminer.dockerfile
ports:
- ${ADMINER_PORT}:8080
restart: on-failure
networks:
- db
depends_on:
- db
container_name: adminer
networks:
app-backend-fairfair:
name: app-backend-fairfair
db:
name: db

我确信这可以通过一些更改来解决。。。也许在docker-compose.yaml文件里?

提前感谢您的帮助!

您的配置看起来不错,应该足以按预期工作。

错误消息还指示网络设置正在工作,数据库主机可以解决,但不接受连接。最有可能的是,数据库还没有准备好接受连接。仅仅等待它完成初始化就足够了。

因此,通过检查mysql服务的日志输出来验证该服务是否已完成初始化:

docker-compose logs db

然后验证它是否接受本地接口/unix套接字上的连接:

docker-compose exec db mysql -u root -proot

接下来,您可以验证mysql是否接受其(从容器的角度来看(外部接口上的连接:

docker-compose run --rm db mysql -h db -u root -proot

最新更新