mysql - 在 docker-compose build 期间运行数据库迁移失败,但它可以从命令行运行

标签 mysql symfony docker docker-compose migration

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

容器称为: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 后起作用,但不是自动从脚本中起作用。

最佳答案

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

不仅在镜像构建期间进行数据库迁移是一个坏主意:如果它所依赖的数据库运行在不同的容器上并试图通过其内部网络名称访问它是不可能的。

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

关于mysql - 在 docker-compose build 期间运行数据库迁移失败,但它可以从命令行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56988190/

相关文章:

mysql - 在 View 中使用索引

mysql - 我想从多个数据库创建一个 HTML 表 RoR

MYSQL 按另一个表列排序但需要一些(和)条件

javascript - 如果之前的进程正常工作,Symfony 不会发送响应

symfony - 在 Symfony2 dev env Controller 中捕获 swiftmailer 异常

docker - 1.9.1中不存在用于数据容器的Docker卷

mysql - 在 MYSQL 中的特定条件下查找最新日期的记录以及其他相应的值

symfony - 在 Dotrine 中查询连接表

security - 如何在 Kubernetes pod/container 中以非 root 用户身份登录

docker - 基于另一个 ENV 变量的变量的条件集