开源改变世界

Docker 因 ENOSPC 而失败 #371

推推 grbl 2年前 (2023-02-02) 182次浏览
关闭
3个任务完成
MitchBradley 打开了这个问题 2018 年 8 月 2 日 · 6条评论
关闭
3个任务完成

Docker 因 ENOSPC 而失败#371

MitchBradley 打开了这个问题 2018 年 8 月 2 日 · 6条评论

评论

Docker 因 ENOSPC 而失败 #371
贡献者
米奇布拉德利 评论了 2018 年 8 月 2 日  

描述

在全新的 Windows 10 Home 系统上全新安装 Docker Toolbox 后,我尝试运行 cncjs 并收到以下错误:

$ docker run --privileged -p 8000:8000 --rm --name cnc cncjs/cncjs:latest
<Pull complete messages elided for brevity>
[nodemon] 1.18.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node bin/cnc`
2018-08-01T23:11:44.919Z - info init Loading configuration from "/root/.cncrc"
2018-08-01T23:11:45.250Z - info init Starting the server at http://172.17.0.2:8000
[nodemon] Internal watch failed: watch /proc/net/netfilter ENOSPC

同样的事情发生在 cncjs/cncjs:master-latest

版本

  • CNCjs:截至 2018-08-01 的 docker 图像

你如何安装CNCjs?

通过 Docker

数控系统

  • TinyG/g2核心

硬件

  • 台式机或笔记本电脑

操作系统

  • Windows 10 主页
Docker 因 ENOSPC 而失败 #371
贡献者作者

如果我直接从 docker 命令行启动 CNC,避免使用“nodemon”,问题就会消失。

docker run --privileged -p 8000:8000 --rm --name cnc cncjs/cncjs:latest bin/cnc

我认为这可能是相关的: https ://stackoverflow.com/questions/34662574/node-js-getting-error-nodemon-internal-watch-failed-watch-enospc

解决方案可能是使用“nodemon –watch”来仅指定它应该查看的目录。很难想象 watching /proc 是合适的!

Docker 因 ENOSPC 而失败 #371
合作者

从 切换nodemonpm2可能是管理流程的更好选择。

Docker 因 ENOSPC 而失败 #371
贡献者作者

pm2 似乎有点重量级。我发现管理 pm2 比我希望的要复杂。

我让它与这个命令一起工作:

docker run --privileged -p 8000:8000 --rm --name cnc cncjs/cncjs:latest nodemon --watch output --watch node_modules bin/cnc

也许如果 cncjs 安装在子目录中而不是直接安装在容器根目录中,则该子目录可能是 –watch 的目标。

Docker 因 ENOSPC 而失败 #371

我可能遗漏了一些东西,但为什么要在 dockerfile 中使用 nodemon?为什么不只是

CMD ["/usr/local/bin/cncjs"]

Docker 因 ENOSPC 而失败 #371
合作者

Nodemon 非常适合开发,而不是主要用于生产。程序异常时使用轻量级shell脚本重启进程如何?

#!/bin/sh

while [ 1 ]
do
    /usr/local/bin/cncjs
    sleep 1
done
Docker 因 ENOSPC 而失败 #371

是的,IMO nodemon 主要用于开发。根据我的经验,docker 以生产用例为目标,因此在容器中看到 nodemon 似乎以一种不寻常的方式混合了两者。

如果您正在寻找,Docker 可以处理重启。如果容器内没有需要保留的隐藏状态,可以--restart=always在启动容器时添加,例如

docker run --detach --restart=always ...

如果您确实有隐藏状态,也许您可​​以将其移动到绑定安装的卷,该卷在容器退出后仍然存在。这是 docker 的典型模式。

Docker 因 ENOSPC 而失败 #371 cheton 自己分配了这个 2018 年 11 月 2 日
Docker 因 ENOSPC 而失败 #371 cheton 将此 添加到 1.9里程碑 2018 年 11 月 2 日
喜欢 (0)