控制台PHP脚本在通过docker exec或PhpStorm执行时运行方式不同

我试图通过PhpStorm运行控制台运行Doctrine 2的控制台脚本。 Docker被设置为部署服务器。

如果我运行这个:

$ docker exec container_name /var/www/vendor/bin/doctrine-module orm:schema-tool:create

它打印:

没有要处理的元数据类。

但是当我运行PhpStorm中的PHP运行/debuggingconfiguration:文件:/ home / username / PhpstormProjects / proj / vendor / bin / doctrine-module

它打印:

docker:// image_name / container_name / var / www / vendor / bin / doctrine-module

致命错误:未捕获PDOException:PDO :: __构造():php_network_getaddresses:getaddrinfo失败:名称或服务不知道/var/www/vendor/zendframework/zend-servicemanager/src/ServiceManager.php行765

Zend \ ServiceManager \ Exception \ ServiceNotCreatedException:无法创build名称为“doctrine.connection.orm_default”的服务。 原因:在驱动程序中发生了一个exception:SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo失败:名称或服务未知/ /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.0268 360480 2. include('/ var / www / vendor / doctrine / doctrine-模块/ 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正在创build它收到绝对相同的论点

new PDO("mysql:host=db;port=3306;dbname=dbname", "user", "pass", [])

泊坞窗,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 

我遇到了同样的问题,我发现,PHPStorm为您的PHP调用启动了一个新的专用Docker容器。 所以,现在你所有的docker-composeconfiguration都没有了。

我做了以下几点:

  • 用撰写开始你的Docker堆栈
  • 之后find您的networking名称与docker network ls (请参阅无法链接到由docker-compose启动的正在运行的容器以获取帮助)
  • 在里面PHPStorm转到你的Docker容器(语言&框架 – > PHP – > PHPUnit:Docker容器…)的首选项,并添加一个链接到你的数据库(如:name = your_containter_name_1,别名= db),并改变networking模式从网桥到您的networking名称