Проблема с подключением к базе данных через контейнеры docker - PullRequest
0 голосов
/ 29 февраля 2020

Я установил среду разработки с Symfony и MariaDB через docker.

Я взял там изображение битмана / 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 file:

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 -составляем , оба контейнера запускаются, и я могу получить доступ к 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 

Странно то, что я могу получить доступ к базе данных MariaDB через dbeaver без проблем. Кажется, что контейнеру Symfony не удалось найти контейнер MariaDB.

Я уточню, что я использую symfony версию 5.0.4

Если кто-нибудь знает, где эти ошибки исходить буду благодарен

1 Ответ

2 голосов
/ 29 февраля 2020

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

В контексте docker, localhost - это текущий запущенный контейнер. Поскольку он используется из вашего symfony контейнера, он попытается найти там БД.

Из вашего docker-compose.yml файла ваша служба БД называется mariadb и будет разрешена как таковая из контейнеров. участие в сети по умолчанию для вашего приложения:

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

Примечание. Я подозреваю, что у вас могут возникнуть другие проблемы, связанные с настройками пользователей БД после установления соединения. Если это так, внимательно изучите документацию по конфигурации вашего образа БД .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...