“名称解析中的临时失败”:Symfony 5.3 使用 Doctrine 和 Docker 连接到 MariaDB
Posted
技术标签:
【中文标题】“名称解析中的临时失败”:Symfony 5.3 使用 Doctrine 和 Docker 连接到 MariaDB【英文标题】:"Temporary failure in name resolution": Symfony 5.3 Connection to MariaDB with Doctrine and Docker 【发布时间】:2021-09-03 20:35:18 【问题描述】:我的开发环境在 docker(nginx、php 和 mariadb)中运行,并尝试在 symfony 中使用教义创建数据库。当我运行php bin/console doctrine:database:create
时,我会得到以下错误:
[critical] Error thrown while running command "doctrine:database:create". Message: "An exception occurred in driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution"
我在.env
中的配置如下:
DATABASE_URL="mysql://admin:symfony-admin@db/symfony_test?serverVersion=mariadb-10.1"
这是我的docker-compose.yml
:
version: "3.6"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./code:/code
- ./site.conf:/etc/nginx/conf.d/site.conf
depends_on:
- php
php:
build: .
volumes:
- ./code:/code
links:
- db
db:
image: mariadb:latest
restart: always
ports:
- "33006:3306"
volumes:
- ./db:/docker-entrypoint-initdb.d/
environment:
MYSQL_ROOT_PASSWORD: 'symfony-root-pwd'
MYSQL_DATABASE: 'symfony_db'
MYSQL_USER: 'admin'
MYSQL_PASSWORD: 'symfony-admin'
我也使用 adminer 来访问数据库,然后登录就可以了。
有人知道我为什么不能用学说创建数据库吗?
干杯,
迈克尔
解决方案:
我自己找到了解决方案。命令php bin/console doctrine:database:create
需要在 php docker 容器中运行,而不是在本地终端中运行。
所以首先是docker-compose exec php /bin/bash
,然后是php bin/console doctrine:database:create
【问题讨论】:
【参考方案1】:你可以添加
links:
- db
到 php
服务配置并将您的 DATABASE_URL
更改为
DATABASE_URL="mysql://admin:symfony-admin@db/symfony_db?serverVersion=mariadb-X.X.X"
服务db
将暴露给php
服务,并且在php
容器中db
将成为db
服务的主机(链接)
【讨论】:
嗨马克西姆,我试过了,但不幸的是它不起作用。我根据您的建议编辑了我的帖子。我有什么问题吗?【参考方案2】:通常,这个问题出在密码上。由于连接字符串是一个 URL,它对特殊字符进行编码,认为它是一个参数。
为了清楚起见,解决此问题需要以下两个步骤之一:
-
密码的 URL 编码,以便您获得带引号(% 编码)的字符,例如在 .env.local 或 .env 中:
例如,将字符 # 替换为 %23(其编码版本)。
-DATABASE_URL=mysql://user:special#password@localhost:3306/db?serverVersion=8.0 +DATABASE_URL=mysql://user:special%23password@localhost:3306/db?serverVersion=8.0
-
或从 config/packages/doctrine.yaml 中的教义.dbal.url 中删除 resolve::
doctrine: dbal: url: '%env(DATABASE_URL)%'
第一个适合我!
答案参考:Malformed parameter "url". Symfony 5 does not accept special characters. #35568
【讨论】:
以上是关于“名称解析中的临时失败”:Symfony 5.3 使用 Doctrine 和 Docker 连接到 MariaDB的主要内容,如果未能解决你的问题,请参考以下文章
symfony 5.3 连接微软 sql server mssql
无法使用 Encore 在 Symfony 5.3 上正确安装和使用引导程序
配置 Symfony 5.3 以使用专用的 MongoDB 数据库进行测试