我在开发中的docker容器中运行了一个nodemon。我在代码更改时成功设置了实时重新加载。
但有时我会编写一些nodemon崩溃的代码。当您键入“rs”(在本地运行时)时,可以手动重新启动Nodemon。
问题是在docker容器中我无法重启。
我试过以下但没有运气:
docker exec -it add92j sh -c echo rs
====>找不到
docker attach
====>只是回声
我还尝试过docker exec -it sh
然后输入rs但它不起作用。
我还尝试将shell与ps aux
一起使用,使用echo rs > /proc/PID/fd/0
进行处理,然后:
SIGUSR2
但这也行不通。 (注意我已经使用rs和rs \ n并使用printf和echo尝试了所有上述变体。)
在nodemon github中,我看到它寻找'rs \ n'来触发重启,并且引用了kill -12 PID
。因此我也试过SIGUSR2
,但这只会杀死我的过程。请注意,我检查了容器中的12确实是ps aux
。
使用 1 root 0:00 npm
14 root 0:00 sh -c DEBUG=app:* nodemon
15 root 0:00 node /workspace/node_modules/.bin/nodemon
29 root 0:00 sh -c node server/register.js
30 root 0:01 node server/register.js
在我的容器中实际运行的进程是:
mInteractor.searchDiscogs(searchViewQueryTextEvent.toString())
所以我的问题是,如何将文本发送到stdin以获取docker中的进程?
答案 0 :(得分:1)
运行带有-t
tty和-i
stdin的nodemon容器,可以在nodemon
之后控制docker attach
→ CID=$(docker run -dti dply/node-docker-demo-app:nodemon)
→ docker attach $CID
rs
[nodemon] starting `node /app/index.js`
Listening on 8080
^Csigint