Linux 如何将STDIN发送到docker进程
我有一个nodemon在开发中的docker容器中运行。我已成功设置了代码更改时的实时重新加载 然而,有时我会在nodemon崩溃的地方编写一些代码。当您键入“rs”(在本地运行时)时,可以手动重新启动Nodemon 问题是,在docker容器中,我无法让它重新启动 我尝试了以下方法,但没有成功:Linux 如何将STDIN发送到docker进程,linux,docker,containers,Linux,Docker,Containers,我有一个nodemon在开发中的docker容器中运行。我已成功设置了代码更改时的实时重新加载 然而,有时我会在nodemon崩溃的地方编写一些代码。当您键入“rs”(在本地运行时)时,可以手动重新启动Nodemon 问题是,在docker容器中,我无法让它重新启动 我尝试了以下方法,但没有成功: docker exec-它添加92J rs=>找不到rs docker exec-it add92j sh-c echo rs=>只需echo rs 我还尝试了docker-attach,然后键入rs
docker exec-它添加92J rs
=>找不到rs
docker exec-it add92j sh-c echo rs
=>只需echo 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-12pid
,但这只会终止我的进程。注意,我检查了一下,看看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
因此,我的问题是,如何将文本发送到stdin以用于docker中的进程?运行带有stdin的
-t
tty和-I
的nodemon容器允许您在docker附加后控制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
那么echo rs | docker exec-it add92j
呢?您是否使用-ti
选项为nodemon运行初始docker运行
?在尝试docker attach
之前,这个建议与docker attach
一起帮助我解决了容器启动后没有显示stdin
交互的情况