我使用Symfony 3.1.5,我正在尝试运行一个简单的
php bin/console doctrine:database:create
我的parameters.yml
parameters:
database_host: hhvm_db_1
database_port: 5432
database_name: dbname
database_user: dbuser
database_password: mypassword
我的config.yml
doctrine:
dbal:
driver: pdo_pgsql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
我收到以下错误消息:
[Doctrine\DBAL\Exception\DriverException]
An exception occured in driver: [32681]: could not translate host name "hhvm_db_1
port=5432 dbname=postgres " to address: Name or service not known
[Doctrine\DBAL\Driver\PDOException]
[32681]: could not translate host name "hhvm_db_1 port=5432 dbname=postgres " to a
ddress: Name or service not known
[PDOException]
[32681]: could not translate host name "hhvm_db_1 port=5432 dbname=postgres " to a
ddress: Name or service not known
错误消息对我来说很奇怪,因为它在我的parameters.yml中指定了不同的数据库时指出dbname=postgres
。我试图直接在config.yml中更改它,但这不会改变一件事。数据库主机和端口来自我的parameters.yml。
我认为doctrine只是使用dbname的默认参数,因为它由于某种原因无法解析我的参数。这可能是什么问题?
我不认为这确实是问题,但我在一个带有hhvm的docker容器中运行symfony。上面的错误消息中的hhvm_db_1
是运行Postgres的第二个容器。当我检查与vanilla PHP的连接时,它可以工作,我可以连接到数据库。因此,可以从我的Web容器访问主机。
答案 0 :(得分:1)
我发现我的系统遇到包含空格而不是分号的dsn字符串的问题。
不起作用:
pgsql:host=hhvm_db_1 port=5432 dbname=postgres
工作正常:
pgsql:host=hhvm_db_1;port=5432;dbname=postgres
我最初的问题也解决了。 PDOPgSQL的DBAL驱动程序使用postgres作为默认数据库来检查连接。