gpt4 book ai didi

linux - 如何将 STDIN 发送到 docker 进程

转载 作者:太空狗 更新时间:2023-10-29 12:25:22 25 4
gpt4 key购买 nike

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

但是有时我写了一些 nodemon 崩溃的代码。当您键入“rs”(在本地运行时)时,可以手动重新启动 Nodemon。

问题是在 docker 容器中我无法让它重新启动。

我试过以下但没有成功:

docker exec -it add92j rs ====> 找不到 rs

docker exec -it add92j sh -c echo rs ====> 只是回显 rs

我也试过 docker attach 然后输入 rs 但它不起作用。

我也尝试过将 shell 与 docker exec -it sh 一起使用,通过 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

所以我的问题是,如何将文本发送到 docker 中进程的标准输入?

最佳答案

使用 -t tty 和 -i 为标准输入运行 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

关于linux - 如何将 STDIN 发送到 docker 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43228938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com