mysql - 通过Docker容器进行数据库连接问题

标签 mysql docker symfony doctrine-orm mariadb

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

我在那拍了位图文/ 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

关于mysql - 通过Docker容器进行数据库连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60463329/

相关文章:

PHP:简单的 PDO 循环不起作用?

docker - parse_repo_spec(repo) 错误 : Invalid git repo specification: 'rga'

symfony - 具有数据库连接依赖关系的自定义约束验证器 Symfony2

mysql - Laravel 根据 json 的范围获取属性值

php - 使用json_encode显示select查询的内容时,如何命名对象?

MYSQL SUM() 总分

php - symfony2 : error when rendering template - Object could not be converted to string

bash - 未知速记标志 : 'd' in -d

docker - docker 版本号18.09

php - 访问 PHP 数组对象 protected 属性