如何将STDIN发送到docker过程

我有一个在开发中的docker容器中运行的nodemon。 代码更改时,我已成功设置实时重新加载。

不过有时候我会在nodemon崩溃的时候写一些代码。 当您键入'rs'(当在本地运行时),可以手动重新启动Nodemon。

问题是,在docker集装箱内,我无法重新启动它。

我已经尝试了以下,没有运气:

docker exec -it add92j rs ====> rs not found

docker exec -it add92j sh -c echo rs ====> just docker exec -it add92j sh -c echo rs rs

我也尝试docker attach ,然后键入rs,但它不起作用。

我也尝试用docker exec -it sh来使用shell,用ps aux获取进程,然后:

echo rs > /proc/PID/fd/0

但是这也行不通。 (注意我已经尝试了rs和rs \ n并使用printf和echo)的所有上述变体。

在nodemon github中,我看到它寻找'rs \ n'来触发重新启动,并且有对SIGUSR2的引用。 因此,我也尝试kill -12 PID但这只是杀死了我的过程。 请注意,我查看了12个确实是我的容器中的SIGUSR2

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 

所以我的问题是,如何发送文本到标准input的泊坞窗进程?

使用-t tty和-i为stdin运行nodemon容器,可以在nodemon docker attach后控制nodemon

 → CID=$(docker run -dti dply/node-docker-demo-app:nodemon) → docker attach $CID rs [nodemon] starting `node /app/index.js` Listening on 8080 ^Csigint