【发布时间】:2017-01-18 12:34:16
【问题描述】:
我正在尝试通过 PhpStorm 运行控制台运行 Doctrine 2 的控制台脚本。 Docker 设置为 Deploy 服务器。
如果我运行这个:
$ docker exec container_name /var/www/vendor/bin/doctrine-module orm:schema-tool:create
打印出来:
没有要处理的元数据类。
但是当我在 PhpStorm 中运行 PHP 运行/调试配置时: 文件:/home/username/PhpstormProjects/proj/vendor/bin/doctrine-module
打印出来:
docker://image_name/container_name /var/www/vendor/bin/doctrine-module
致命错误:未捕获的 PDOException: PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/vendor/zendframework/zend-servicemanager/src/ServiceManager.php on line 765
Zend\ServiceManager\Exception\ServiceNotCreatedException:无法创建名为“doctrine.connection.orm_default”的服务。原因:驱动发生异常:SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/vendor/zendframework/zend-servicemanager/src/ServiceManager.php on line 765
调用堆栈: 0.0001 349368 1. {main}() /var/www/vendor/doctrine/doctrine-module/bin/doctrine-module:0 0.0268 360480 2. 包含('/var/www/vendor/doctrine/doctrine-module/bin/doctrine-module.php')/var/www/vendor/doctrine/doctrine-module/bin/doctrine-module:4 0.9376 4076096 3. Zend\ServiceManager\ServiceManager->get() /var/www/vendor/doctrine/doctrine-module/bin/doctrine-module.php:61 0.9376 4076096 4. Zend\ServiceManager\ServiceManager->doCreate() /var/www/vendor/zendframework/zend-servicemanager/src/ServiceManager.php:200
进程以退出代码 255 结束
我检查了在创建 PDO 时它接收到的参数完全相同
new PDO("mysql:host=db;port=3306;dbname=dbname", "user", "pass", [])
docker-compose.yml:
version: '2'
services:
nginx:
container_name: nginx
build:
context: .
dockerfile: DockerfileNginx
ports:
- "80:80"
depends_on:
- php
working_dir: /var/www
links:
- php
volumes:
- .:/var/www
links:
- db
php:
container_name: php
build:
context: .
dockerfile: DockerfilePhp
- db
volumes:
- .:/var/www
expose:
- "9000"
depends_on:
- db
db:
container_name: db
image: "mysql:5.6"
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: dbname
MYSQL_USER: user
MYSQL_PASSWORD: pass
【问题讨论】:
-
我猜你应该在连接字符串中使用 localhost 而不是 db,因为 PHPStorm 是从外部容器运行的: new PDO("mysql:host=localhost;port=3306;dbname=dbname", "用户”,“通过”,[]);这应该可以工作,因为您已经映射了“3306:3306”(顺便说一句之后有一个奇怪的字符)
-
PHPStorm 在容器内执行测试。主机“db”是正确的。