Symfony4/Docker:SQLSTATE[HY000][2002]连接被拒绝
我对Symfony 4和数据库连接有问题。 我尝试使用Symfony4/Docker:SQLSTATE[HY000][2002]连接被拒绝,docker,doctrine,docker-compose,symfony4,Docker,Doctrine,Docker Compose,Symfony4,我对Symfony 4和数据库连接有问题。 我尝试使用php-bin/console-make:migration进行迁移,但随后我遇到了连接被拒绝的错误 In AbstractMySQLDriver.php line 113: An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused In PDOConnection.php line 50: SQLSTATE[HY000] [200
php-bin/console-make:migration
进行迁移,但随后我遇到了连接被拒绝的错误
In AbstractMySQLDriver.php line 113:
An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused
In PDOConnection.php line 50:
SQLSTATE[HY000] [2002] Connection refused
In PDOConnection.php line 46:
SQLSTATE[HY000] [2002] Connection refused
我的.env文件如下所示
###> doctrine/doctrine-bundle ###
# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# Configure your db driver and server_version in config/packages/doctrine.yaml
DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name
DATABASE_USER=sf4user
DATABASE_PWD=sf4pwd
DATABASE_NAME=sf4
DATABASE_HOST=127.0.0.1
DATABASE_PORT=3306
###< doctrine/doctrine-bundle ###
据我所知,数据库URL是根据我在.env文件中设置的内容来解析的,但我无法使其正常工作,每当我尝试调用处理db的控制台方法时,都会出现连接被拒绝错误
我使用docker-compose.yml文件构建项目:
version: '3'
services:
apache:
build: .docker/apache
container_name: sf4_apache
ports:
- 80:80
volumes:
- .docker/config/vhosts:/etc/apache2/sites-enabled
- .:/home/wwwroot/sf4
depends_on:
- php
mysql:
image: mysql
container_name: sf4_mysql
volumes:
- .docker/data/db:/var/lib/mysql
command: ["--default-authentication-plugin=mysql_native_password"]
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root_pwd_test
MYSQL_DATABASE: sf4
MYSQL_USER: sf4user
MYSQL_PASSWORD: sf4pwd
php:
build: .docker/php
container_name: sf4_php
volumes:
- .:/home/wwwroot/sf4
environment:
- maildev_host=sf4_maildev
depends_on:
- maildev
- mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: sf4_phpmyadmin
ports:
- 8080:80
links:
- mysql
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: root_pwd_test
PMA_HOST: mysql
我会错过什么?我通过以下方式解决了这个问题:
- 降级到mysql 5.7
- 从docker-compose.yml中删除命令:[“--default authentication plugin=mysql\u native\u password”]
- 在.env文件中的数据库_URL中对凭据进行harcoding,并引用“mysql”(docker compose中的服务名称),而不是127.0.0.1
- 数据库地址=mysql://sf4user:sf4password@mysql:3306/sf4
version: '3'
services:
apache:
build: .docker/apache
container_name: sf4_apache
ports:
- 80:80
volumes:
- .docker/config/vhosts:/etc/apache2/sites-enabled
- .:/home/wwwroot/sf4
depends_on:
- php
mysql:
image: mysql
container_name: sf4_mysql
volumes:
- .docker/data/db:/var/lib/mysql
command: ["--default-authentication-plugin=mysql_native_password"]
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root_pwd_test
MYSQL_DATABASE: sf4
MYSQL_USER: sf4user
MYSQL_PASSWORD: sf4pwd
php:
build: .docker/php
container_name: sf4_php
volumes:
- .:/home/wwwroot/sf4
environment:
- maildev_host=sf4_maildev
depends_on:
- maildev
- mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: sf4_phpmyadmin
ports:
- 8080:80
links:
- mysql
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: root_pwd_test
PMA_HOST: mysql