如何在创建VS Code开发容器后自动启动Node服务器?

4
我正在使用VS Code的功能为我的服务创建开发容器。使用以下布局,我定义了一个单独的服务(目前只有一个)。我想在配置容器以侦听http请求后自动运行我的node项目,但还没有找到最好的方法。
我的项目目录
- project-name - .devcontainer.json - package.json (等等) - docker-compose.yaml
现在在我的docker-compose.yaml中,我定义了以下结构:
version: '3'

services:
    project-name:
        image: node:14
        command: /bin/sh -c "while sleep 1000; do :; done"
        ports: 
            - 4001:4001
        restart: always
        volumes:
            - ./:/workspace:cached

请注意,根据VS Code文档的要求,我需要将/bin/sh -c "while sleep 1000; do :; done"作为服务command,这样服务就不会关闭。

在我的.devcontainer.json文件中:

{
    "name": "My Project",
    "dockerComposeFile": [
        "../docker-compose.yaml"
    ],
    "service": "project-name",
    "shutdownAction": "none",
    "postCreateCommand": "npm install",
    "postStartCommand": "npm run dev" // this causes the project to hang while configuring?
    "workspaceFolder": "/workspace/project-name"
}

我已经添加了一个postCreateCommand来安装依赖项,但我还需要运行npm run dev以使我的服务器监听请求。然而,如果我将此命令添加到postStartCommand中,项目会构建和运行,但它在技术上会停留在Configuring Dev Server(在VS Code底部有一个旋转器),因为这启动了我的服务器,脚本没有“退出”,所以我觉得应该有更好的方法在容器设置后触发服务器运行?

enter image description here


1
你找到了一个好的方法来做这件事了吗? - medihack
1个回答

0

请参考 https://code.visualstudio.com/remote/advancedcontainers/start-processes

在其他情况下,您可能希望启动一个进程并让它保持运行状态。可以通过使用nohup命令并使用&将进程放入后台来实现这一点。例如:

"postStartCommand": "nohup bash -c 'your-command-here &'"

我刚试了一下,它对我有效 - 它消除了我也看到的旋转的“配置Dev容器”。但是,这意味着该过程在后台运行,因此您的日志将无法显示在devcontainer终端中。我习惯于在该终端中观看我的ng serve日志,以了解何时完成编译,但现在我看不到它们了。我还没有决定是否会切换回旧方式。仅当我看不到任何影响时,旋转的配置Dev容器才会令人讨厌。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接