docker 容器内执行宿主机命令 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ccceeeooo
V2EX    程序员

docker 容器内执行宿主机命令

  •  
  •   ccceeeooo 2018 年 11 月 28 日 16954 次点击
    这是一个创建于 2612 天前的主题,其中的信息可能已经有所发展或是发生改变。
    事情就是用容器跑了一个 nodejs 网关,用来分发流量到其他几个后端接口容器,想在 nodejs 网关的前端配置页面就能执行宿主机脚本,以依次重启、更新接口容器的代码,相当于热重启了。有没有较优雅的方式实现,google 了几轮,都没有人这样做的吗?
    第 1 条附言    2018 年 12 月 4 日

    找到一个类似的做法

    6 creative ways to solve problems with Linux containers and Docker #Scenario 4

    e..这个也是只读

    32 条回复    2018-12-05 09:35:52 +08:00
    ccceeeooo
        1
    ccceeeooo  
    OP
       2018 年 11 月 28 日
    自己回复一条骗大佬进来
    ChristopherWu
        2
    ChristopherWu  
       2018 年 11 月 28 日
    @xiaochocking 宿主机起一个后端服务,接受 nodejs 网关的调用,从而执行宿主机脚本。
    cluulzz
        3
    cluulzz  
       2018 年 11 月 28 日 via iPhone   1
    宿主跑 pm2
    你暴露了
    ccceeeooo
        4
    ccceeeooo  
    OP
       2018 年 11 月 28 日
    @ChristopherWu 这样还有用 docker 跑 node 的必要吗..
    wfd0807
        5
    wfd0807  
       2018 年 11 月 28 日
    应该不会有 docker 的原生解决方案
    hcymk2
        6
    hcymk2  
       2018 年 11 月 28 日   1
    div class="reply_content">https://success.docker.com/article/how-do-i-enable-the-remote-api-for-dockerd
    shylockhg
        7
    shylockhg  
       2018 年 11 月 28 日
    -v 不知道可以不
    Kilerd
        8
    Kilerd  
       2018 年 11 月 28 日   1
    当然有啊。

    在 NodeJS Gateway 的 Docker 里面传入宿主机的 docker.sock 不就可以操作这台机子的所有 docker 容器了嘛
    NotNil1
        9
    NotNil1  
       2018 年 11 月 28 日
    --privileged 试一试
    stebest
        10
    stebest  
       2018 年 11 月 28 日
    直接挂载目录不行么
    ccceeeooo
        11
    ccceeeooo  
    OP
       2018 年 11 月 28 日
    @Kilerd 这样能执行宿主机的 bash 吗

    @shylockhg @ljtletters @stebest 想要的效果是执行宿主机的 bash..
    jeffson
        12
    jeffson  
       2018 年 11 月 28 日
    问题刁钻
    jinhan13789991
        13
    jinhan13789991  
       2018 年 11 月 28 日 via Android
    可以啊,本机开启 SSH,docker 宿主机登录然后操作
    ccceeeooo
        14
    ccceeeooo  
    OP
       2018 年 11 月 28 日
    @jeffson /doge
    ccceeeooo
        15
    ccceeeooo  
    OP
       2018 年 11 月 28 日
    @jinhan13789991 查到有人是这样做的
    uoryon
        16
    uoryon  
       2018 年 11 月 28 日
    @xiaochocking 你想执行宿主机的 bash,那就把 bash 以及 bash 操作的东西都能让这个容器访问到呀。
    zn
        17
    zn  
       2018 年 11 月 28 日 via iPhone
    docker 一大功能,或者说亮点,就是防止这种事的发生………
    killadm
        18
    killadm  
       2018 年 11 月 28 日
    ssh 进去
    mritd
        19
    mritd  
       2018 年 11 月 28 日 via iPhone
    事实上,你本就不应该这么做
    mritd
        20
    mritd  
       2018 年 11 月 28 日 via iPhone
    这个事是编排工具 或者 ci 做的,所以你会发现 google 没啥结果
    ccceeeooo
        21
    ccceeeooo  
    OP
       2018 年 11 月 28 日
    @zn 感觉的确是反模式,除了需要执行宿主命令,还是挺适合在容器里跑的,所以才想找找方法
    gam2046
        22
    gam2046  
       2018 年 11 月 28 日   2
    十分诡异的需求,docker 设计的目的就是为了资源隔离,结果你现在希望在容器中逃逸。

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

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

    如果需要网络数据的话用 nsenter --net=/host/proc/1/ns/net sh ...
    vakara
        24
    vakara  
       2018 年 11 月 28 日 via Android
    这个需求不诡异,一些监控功能的容器都是这样用的。
    yujincheng08
        25
    yujincheng08  
       2018 年 11 月 28 日 via Android
    挂载目录,然后弄个管道。host 弄个监控教程 fork 然后执行命令?
    NotNil1
        26
    NotNil1  
       2018 年 11 月 29 日
    @xiaochocking 可以的,我的可以
    julyclyde
        27
    julyclyde  
       2018 年 11 月 29 日
    “用 docker ”是“穿上裤子再放那个本来应该光屁股的时候就放的屁”
    hotsymbol
        28
    hotsymbol  
       2018 年 11 月 30 日
    到 Moby (原 Docker )提个 Issues 不就行了
    ccceeeooo
        29
    ccceeeooo  
    OP
       2018 年 12 月 4 日
    @ljtletters 老哥你还做了什么步骤
    ccceeeooo
        30
    ccceeeooo  
    OP
       2018 年 12 月 4 日
    @vakara 试了你那个方法 当我执行 touch 的时候 报 Read-only file system
    vakara
        31
    vakara  
       2018 年 12 月 4 日 via Android
    @xiaochocking 你往哪里 touch 的?怎么执行的?
    ccceeeooo
        32
    ccceeeooo  
    OP
       2018 年 12 月 5 日
    @vakara 就是你那句 nsenter --mount=/host/proc/1/ns/mnt sh -c "ls /root" ,list /root 改成 touch xxx
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1069 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 18:44 PVG 02:44 LAX 10:44 JFK 13:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86