我正在使用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