【问题标题】:How to send STDIN to docker process如何将 STDIN 发送到 docker 进程
【发布时间】:2017-04-05 10:45:39
【问题描述】:

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

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

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

我尝试了以下方法,但没有成功:

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

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

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

【问题讨论】:

  • echo rs | docker exec -it add92j 呢?
  • 您是否使用-ti 选项为nodemon 运行初始docker run?在尝试docker attach之前?

标签: linux docker containers


【解决方案1】:

使用-t tty 和-i for stdin 运行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

【讨论】:

  • 这个docker attach 的建议在容器启动后没有显示stdin 交互的情况下帮助了我
猜你喜欢
  • 2017-10-02
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多