PhpStorm + Docker + Xdebug + DB SSH 隧道

Posted

技术标签:

【中文标题】PhpStorm + Docker + Xdebug + DB SSH 隧道【英文标题】:PhpStorm + Docker + Xdebug + DB SSH tunnel 【发布时间】:2019-04-14 09:38:10 【问题描述】:

在本地我有以下 docker-compose 配置:

nginx:
  build:
    context: ./nginx
  ports:
    - "80:80"
  volumes:
    - ./../logs:/home/web/logs/
    - ./../:/home/web/my-website.com/
  depends_on:
    - php
php:
  build:
    context: ./php
  volumes:
    - ./../:/home/web/my-website.com/
  working_dir: /home/web/my-website.com/
  expose:
    - "8123"

php 容器中安装了 Xdebug,我可以轻松地从 PhpStorm 连接到它。

我有通过 SSH 隧道连接的远程 ClickHouse 数据库。当我启动我的容器时,我只是进入我的容器并执行:

ssh -4 login@host.com -p 2211 -L 8123:localhost:8123 -oStrictHostKeyChecking=no -Nf

在此之后,我的站点可以使用此连接,但是当我执行控制台命令时

./yii analysis/start-charts 003b56fe-db47-11e8-bcc0-52540010e5bc 205

来自 PhpStorm,我遇到了一个异常:

Failed to connect to 127.0.0.1 port 8123: Connection refused

如果我跳入容器并启动相同的命令,一切正常。

怎么了?为什么 PhpStorm 看不到我的 SSH 隧道?

【问题讨论】:

在 PhpStorm 中运行它等同于使用您机器的终端运行它:该命令不在容器内运行。我会假设在工作站的控制台中运行./yii analysis/start-charts 003b56fe-db47-11e8-bcc0-52540010e5bc 205 也会失败?顺便说一句,您是在终端中运行此命令还是在执行工具 > 启动 SSH 会话...> 等? @Ástþór,据我所知,PhpStorm 使用我在项目设置中设置的解释器。在我的情况下,它使用来自 docker 容器的解释器,在我的工作站上没有安装 PHP。根据你的第二个问题,首先我执行命令docker exec -u www-data -it docker_php_1 /bin/bash 然后才执行命令./yii analysis/start-charts ... 【参考方案1】:

我在“超级用户”网站上得到了答案:https://superuser.com/questions/1374463/phpstorm-docker-xdebug-db-ssh-tunnel/1375961#1375961

此外,我已将 ports 节点添加到我的 php 容器定义中,现在如下:

  php:
    build:
      context: ./php
    volumes:
      - ./../:/home/web/my-website.com/
    working_dir: /home/web/my-website.com/
    expose:
      - "8123"
    ports:
      - "8123:8123"
    depends_on:
      - redis
      - mysql

【讨论】:

以上是关于PhpStorm + Docker + Xdebug + DB SSH 隧道的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 PhpStorm、Codeception 和 Docker 以可靠地获得代码覆盖率

使用 Docker 在 PhpStorm 中使用 PHPUnit

markdown PHPStorm远程调试Docker容器

phpStorm中使用xdebug工具调试docker容器中的程序

如何设置PhpStorm以便Docker Compose Interpreter可以使用PHP可执行文件?

使用 WSL-2 和 Docker 在 PhpStorm 中设置 PHPUnit:无法解析 PHPUnit 版本输出:无法打开输入文件