在docker-compose构建期间运行数据库迁移失败,但可从命令行运行

时间:2019-07-11 11:31:08

标签: mysql symfony docker docker-compose migration

我有一个docker-compose.yml和一个Dockerfile,它们为Symfony 2.8中的应用程序创建了容器。

这些容器称为:webserver(Nginx),app(Symfony)和db(MySql)。

创建容器时,我可以轻松访问应用程序的bash并运行php app / console doctrine: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 个答案:

答案 0 :(得分:1)

在构建映像时,它尚未在容器上运行并且尚未连接到网络,以便能够看到我们的docker-compose.yml文件中定义的其他容器。

不仅在映像构建过程中进行数据库迁移是一个坏主意:如果依赖它的数据库正在其他容器上运行并尝试通过其内部网络名称来访问它,这是不可能的。

如果已连接数据库服务器,该服务器已经在运行并且具有可公开访问的主机名,并且项目配置为使用那个服务器,而不是在另一个容器中运行,则它将正常工作。但这仍然不是一个好主意。