我已经在docker (nginx、php和mariadb)中运行了dev环境,并尝试在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-compose exec php /bin/bash,然后是php bin/console doctrine:database:create
发布于 2021-06-19 12:58:42
你可以添加
links:
- db到php服务配置,并将DATABASE_URL更改为DATABASE_URL="mysql://admin:symfony-admin@db/symfony_db?serverVersion=mariadb-X.X.X"
服务db将公开给php服务,而在php容器中,db将成为到db服务的主机(链接)。
发布于 2021-07-19 23:26:54
通常,这个问题在密码中。因为连接字符串是一个URL,所以对特殊字符进行编码,认为它是一个参数。
要清楚地说明,解决这一问题需要以下两个步骤中的一个:
例如,将字符#替换为%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
原则: dbal: url:%env(DATABASE_URL)%
第一个对我有用!
https://stackoverflow.com/questions/68046453
复制相似问题