如何将STDIN发送到docker进程

时间:2017-04-05 10:45:39

标签: linux docker containers

我在开发中的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中的进程?

1 个答案:

答案 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