我正在使用docker compose在dev中运行我的应用程序。环境。
version: '3.4'
services:
web:
build:
context: .
target: base
ports:
- "5000:5000"
stdin_open: true
tty: true
volumes:
- ./src:/src
command: node src/main/server/index.js
Composer正在启动容器,我可以看到节点应用程序输出的日志。当我按CTR-C
时-容器停止,我的应用程序也停止。
我希望在我按CTRL-C
而不是整个容器时停止我的应用程序。
在Windows CMD或Linux Shell中运行应用程序时,行为相同。例如,要重新启动应用程序,请按CTRL-C
,重复启动命令(按顶部箭头键{node src/main/server/index.js
),然后按Enter。
我当时想我可以使用类似的东西,但是它不起作用。
command: bash -c "node src/main/server/index.js
我知道我可以使用以下命令来实现预期的行为:
docker-compose up -d
(以分离模式启动)docker-compose exec web bash
(运行交互式外壳)node src/main/server/index.js
(手动启动节点)但是也许有一种方法可以使用singe命令docker-compose up
启动bash交互式bash并在bash中运行应用程序?
答案 0 :(得分:1)
Docker在其容器中运行一个主进程,因此,停止主进程也将停止该容器。
我将尝试回答您的问题,但是我不认为您应该在开发环境中那样工作。
回答您的问题,您可以在一个主要过程中“捕获”容器,然后将其扑向该容器并执行应用程序启动。
为了捕获容器,只需将docker-compose root.Child("users").Child("email").SetRawJsonValueAsync(json);
更改为:
command
要进入容器中的交互式bash:
command: while true; do sleep 1; done;
然后您可以启动或停止节点应用程序。
您似乎面临的问题是容器需要花费很多时间来启动,您可能应该对Dockerfile进行重新排序,以防止每次文件更改时重新下载所有依赖项(或其他漫长的过程)。
您应该将docker exec -it <CONTAINER-ID> bash
命令放在所有应在所有版本中保留的命令之后,并利用docker的图像分层。
如果需要“热重装”功能,则可以研究Webpack热重装。 您需要将主机卷绑定到容器的工作目录,以使webpack正确监视文件并重新加载应用程序。