4

我正在使用 VS Code 的功能为我的服务创建开发容器。使用以下布局,我定义了一个服务(现在)。我想在容器配置为侦听 http 请求后自动运行我的节点项目,但还没有找到最好的方法。

我的项目目录

  • 项目名称
    • .devcontainer.json
    • 包.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

请注意我需要如何/bin/sh -c "while sleep 1000; do :; done"作为服务command,这是根据 VS Code 文档所必需的,以便服务不会关闭?

在我的.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 底部有一个微调器),因为这会启动我的服务器并且脚本不会“退出”,所以我感觉应该有更好的方法来在容器设置后触发服务器运行?

在此处输入图像描述

4

1 回答 1

0

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

在其他情况下,您可能希望启动一个进程并让它继续运行。这可以通过使用 nohup 并使用 & 将进程置于后台来完成。例如:

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

我刚刚尝试过,它对我有用——它消除了我也看到的旋转的“配置开发容器”。但是,这确实意味着该进程正在后台运行,因此您的日志不会出现在 devcontainer 终端上。我习惯于ng serve在那个终端中查看我的日志以了解编译何时完成,但现在我看不到它们。不确定我是否会切换回旧方式。让配置开发容器不断旋转很烦人,但除此之外并没有阻碍我能看到的任何东西。

于 2021-11-17T17:41:22.887 回答