代码之家  ›  专栏  ›  技术社区  ›  ps2goat

使用“docker compose run”时无法调试,但“docker compose up”有效

  •  0
  • ps2goat  · 技术社区  · 6 年前

    我可以创建一个测试回购,如果需要的话。但这个问题的要点是,当我使用 up run 命令。在这两种情况下,我都可以看到我的应用程序启动。vs代码调试器在使用时似乎无法连接到docker容器 docker-compose run .

    这类似于我在vs代码中的工作启动任务(调试器可以连接到该任务):

    {
      "type": "node",
      "request": "launch",
      "name": "Docker: Debug",
      "runtimeExecutable": "docker-compose",
      "runtimeArgs": [
        "up"
      ],
      "port": 9229,
      "stopOnEntry": true,
      "restart": true,
      "timeout": 30000,
      "localRoot": "${workspaceRoot}",
      "remoteRoot": "/app",
      "outFiles": [ "${workspaceRoot}/dist/**/*.js" ],
      "console": "externalTerminal",
      "internalConsoleOptions": "neverOpen",
      "protocol": "inspector",
      "showAsyncStacks": true
    }
    

    npm run start-app ,例如) start-app 具有以下定义:

    nodemon --legacy-watch --watch ./dist/app1 --inspect=0.0.0.0:9229 --nolazy ./dist/app1/index.js
    

    docker-compose.yml

    我希望能够运行容器并指定在我的vs代码中运行哪个应用程序 launch.json 文件,如下所示:

    {
      "type": "node",
      "request": "launch",
      "name": "Docker: Debug",
      "runtimeExecutable": "docker-compose",
      "runtimeArgs": [
            "run",
            "all",
            "npm",
            "run",
            "start-app"
      ],
      "port": 9229,
      "stopOnEntry": true,
      "restart": true,
      "timeout": 30000,
      "localRoot": "${workspaceRoot}",
      "remoteRoot": "/app",
      "outFiles": [ "${workspaceRoot}/dist/**/*.js" ],
      "console": "externalTerminal",
      "internalConsoleOptions": "neverOpen",
      "protocol": "inspector",
      "showAsyncStacks": true
    }
    

    仅供参考 all 在arg列表中引用 文件。

    1 回复  |  直到 6 年前
        1
  •  1
  •   ps2goat    6 年前

    一位同事在的文档中发现了以下代码片段 docker-compose run

    …docker compose run命令不创建服务配置中指定的任何端口。这样可以防止端口与已打开的端口发生冲突。如果确实希望创建服务的端口并将其映射到主机,请指定--service ports标志

    所以我修改了启动任务的参数,使之包含这个标志,现在它可以工作了。

    "runtimeArgs": [
        "run",
        "--service-ports",
        "all",
        "npm",
        "run",
        "start-app"
    ],
    

    再次澄清, --service-ports 告诉docker compose遵守docker-compose.yml文件中的端口映射 up all 是docker-compose.yml文件中我的服务的名称,命令的其余部分是 npm run start-app ,在哪里 start-app

    推荐文章