通过 docker 个容器的数据库连接问题
Database connection issue through docker containers
我已经通过 docker.
使用 Symfony 和 MariaDB 设置了一个开发环境
我在那里拍摄了 bitman/symfony 图片:
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/
我的doctrine.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: 'App\Entity'
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/
注意:我怀疑一旦连接修复,您可能还有其他与数据库用户设置相关的问题需要解决。如果是这种情况,请仔细查看 your db image configuration documentation.
我同意@Zeitounator 的解决方案,但在我的主机中,如果我启动
php bin/console doctrine:migration:migrate
它 returns 一个错误 :
could not translate host name "mariadb" to address: Name or service not known
我通过添加 /etc/hosts 来解决:
127.0.0.1 mariadb
它适用于主机和容器
我已经通过 docker.
使用 Symfony 和 MariaDB 设置了一个开发环境我在那里拍摄了 bitman/symfony 图片:
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/
我的doctrine.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: 'App\Entity'
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/
注意:我怀疑一旦连接修复,您可能还有其他与数据库用户设置相关的问题需要解决。如果是这种情况,请仔细查看 your db image configuration documentation.
我同意@Zeitounator 的解决方案,但在我的主机中,如果我启动
php bin/console doctrine:migration:migrate
它 returns 一个错误 :
could not translate host name "mariadb" to address: Name or service not known
我通过添加 /etc/hosts 来解决:
127.0.0.1 mariadb
它适用于主机和容器