Запуск миграций базы данных во время сборки docker-compose завершается неудачно, но он работает из командной строки - PullRequest
1 голос
/ 11 июля 2019

У меня есть docker-compose.yml и Dockerfile, которые создают контейнеры для приложения в Symfony 2.8.

Контейнеры называются: webserver (Nginx), app (Symfony) и db (MySql).

Когда я создаю контейнеры, я могу легко получить доступ к bash приложения и запустить доктрину php app / console: migrations: migrate.Все работает отлично.

Я хотел бы вставить команду в Dockerfile, например, так:

RUN cd /var/www && php app/console doctrine:migrations:migrate

, но, когда она достигает этой точки, она просто возвращает:

[Doctrine\DBAL\Exception\ConnectionException]                                                                                   
  An exception occured in driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known  

  [Doctrine\DBAL\Driver\PDOException]                                                             
  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known  

  [PDOException]                                                                                  
  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known  

  [PDOException]                                                                               
  PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known  

doctrine:migrations:migrate [--write-sql] [--dry-run] [--query-time] [--allow-no-migration] [--configuration [CONFIGURATION]] [--db-configuration [DB-CONFIGURATION]] [--db DB] [--em EM] [--shard SHARD] [--] [<version>]


ERROR: Service 'app' failed to build: The command '/bin/sh -c cd /var/www && php app/console doctrine:migrations:migrate' returned a non-zero code: 1

В чем может быть проблема?Он работает после того, как я получаю доступ к bash в контейнере, но не автоматически из сценария.

1 Ответ

1 голос
/ 11 июля 2019

Во время создания образа он еще не запущен в контейнере и не подключен к сети, чтобы можно было увидеть другие контейнеры, определенные в нашем файле docker-compose.yml.

Не только миграция БД во время сборки образа является плохой идеей: невозможно, если БД, от которой она зависит, работает в другом контейнере и пытается получить к ней доступ через имя своей внутренней сети.

Если подключен сервер БД, который уже работал и имел общедоступное имя хоста, и проект был настроен на использование этого сервера вместо сервера, работающего в другом контейнере, он работал бы. Но это все равно будет плохой идеей.

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