docker 容器内执行宿主机命令

2018-11-28 17:07:17 +08:00
 xiaochocking
事情就是用容器跑了一个 nodejs 网关,用来分发流量到其他几个后端接口容器,想在 nodejs 网关的前端配置页面就能执行宿主机脚本,以依次重启、更新接口容器的代码,相当于热重启了。有没有较优雅的方式实现,google 了几轮,都没有人这样做的吗?
16183 次点击
所在节点    程序员
32 条回复
xiaochocking
2018-11-28 19:36:02 +08:00
@zn 感觉的确是反模式,除了需要执行宿主命令,还是挺适合在容器里跑的,所以才想找找方法
gam2046
2018-11-28 19:49:46 +08:00
十分诡异的需求,docker 设计的目的就是为了资源隔离,结果你现在希望在容器中逃逸。

你有这样的需求,你的 nodejs 就不应该在 docker 中运行,直接在宿主运行即可。

如果你希望在 docker 中控制(启动、终止、创建、删除)其他容器,只需要将宿主环境下的 /var/docker/docker.sock 挂载到容器内即可。
vakara
2018-11-28 22:05:43 +08:00
挂宿主机 /proc 到容器 /host/proc,
运行容器加 --privileged,
然后容器里面通过 nsenter --mount=/host/proc/1/ns/mnt sh -c "ls /root" 这样执行。

如果需要网络数据的话用 nsenter --net=/host/proc/1/ns/net sh ...
vakara
2018-11-28 22:06:30 +08:00
这个需求不诡异,一些监控功能的容器都是这样用的。
yujincheng08
2018-11-28 23:44:07 +08:00
挂载目录,然后弄个管道。host 弄个监控教程 fork 然后执行命令?
NotNil1
2018-11-29 09:53:11 +08:00
@xiaochocking 可以的,我的可以
julyclyde
2018-11-29 10:46:40 +08:00
“用 docker ”是“穿上裤子再放那个本来应该光屁股的时候就放的屁”
hotsymbol
2018-11-30 00:46:25 +08:00
到 Moby (原 Docker )提个 Issues 不就行了
xiaochocking
2018-12-04 16:20:53 +08:00
@ljtletters   老哥你还做了什么步骤
xiaochocking
2018-12-04 16:32:39 +08:00
@vakara  试了你那个方法 当我执行 touch 的时候 报 Read-only file system
vakara
2018-12-04 22:58:59 +08:00
@xiaochocking 你往哪里 touch 的?怎么执行的?
xiaochocking
2018-12-05 09:35:52 +08:00
@vakara 就是你那句 nsenter --mount=/host/proc/1/ns/mnt sh -c "ls /root" ,list /root 改成 touch xxx

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/512398

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX