我有一个 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/