如何将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