Symfony 5.3环境下使用Doctrine与Docker部署MariaDB时出现'Temporary failure in name resolution'错误的解决
解决Docker环境下Symfony Doctrine创建数据库的DNS解析错误
我之前也碰到过一模一样的问题!在Docker中部署了Nginx+PHP+MariaDB的Symfony开发环境后,尝试用Doctrine创建数据库时,执行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能正常登录数据库,就唯独Doctrine这条命令跑不通。
后来终于找到了解决方案:必须在PHP Docker容器内部执行Doctrine命令,而不是本地终端,具体步骤如下:
- 先进入PHP容器的命令行:
docker-compose exec php /bin/bash
- 进入容器后,再运行创建数据库的命令:
php bin/console doctrine:database:create
原因很直观:本地环境无法解析db这个Docker服务名,只有Docker内部的虚拟网络才能识别这个域名,所以让Doctrine在PHP容器内执行,就能通过内部网络正常连接到MariaDB容器了。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

