通过docker容器的数据库连接问题



我已经通过docker与Symfony和MariaDB建立了一个开发环境。

我在那里拍摄了比特人/符号的图像:

https://hub.docker.com/r/bitnami/symfony

这是我的docker compose.yaml

version: '2'
services:
myapp:
image: 'bitnami/symfony:1'
ports:
- '8000:8000'
volumes:
- '.:/app'
environment:
- SYMFONY_PROJECT_NAME=backend
- MARIADB_PORT_NUMBER=3306
- MARIADB_USER=root
container_name: symfony_container
depends_on:
- mariadb
mariadb:
image: 'bitnami/mariadb:10.3'
ports:
- '3306:3306'
environment:
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_USER=root
container_name: mariadb_container

.env文件:中的重要行

DATABASE_URL=mysql://root:@localhost:3306/

我的学说.yaml文件:

doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
server_version: '5.7'
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'AppEntity'
alias: App

现在,如果我运行docker compose-up,两个容器都会启动,我可以访问Symfony。

但是如果我尝试创建一个实体:

php bin/console make:entity

我得到以下四个错误:

An exception occurred in driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution 
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution  
PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution 

奇怪的是,我可以通过dbeaver轻松访问MariaDB数据库。Symfony容器似乎没有找到MariaDB容器。

我会准确地说,我使用symfony版本5.0.4

如果有人知道这些错误是从哪里来的,我将感谢

DATABASE_URL=mysql://root:@localhost:3306/

在docker的上下文中,localhost是当前正在运行的容器。由于这是从symfony容器中使用的,它将尝试在那里找到数据库。

从您的docker-compose.yml文件中,您的数据库服务名为mariadb,并将从参与应用程序默认网络的容器中解析为:

DATABASE_URL=mysql://root:@mariadb:3306/

注意:我怀疑在修复连接后,您可能还有其他与数据库用户设置有关的问题需要解决。如果是这种情况,请仔细查看数据库映像配置文档。

我同意@Zeitounator解决方案,但在我的主机中,如果我启动
php bin/console doctrine:migration:migrate
,则会返回错误:
could not translate host name "mariadb" to address: Name or service not known我通过添加我的/etc/hosts:
127.0.0.1 mariadb
解决了问题,它在主机和容器上都有效

相关内容

  • 没有找到相关文章

最新更新