• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ccceeeooo
V2EX  ›  程序员

docker 容器内执行宿主机命令

  •  
  •   ccceeeooo · Nov 28, 2018 · 17167 views
    This topic created in 2729 days ago, the information mentioned may be changed or developed.
    事情就是用容器跑了一个 nodejs 网关,用来分发流量到其他几个后端接口容器,想在 nodejs 网关的前端配置页面就能执行宿主机脚本,以依次重启、更新接口容器的代码,相当于热重启了。有没有较优雅的方式实现,google 了几轮,都没有人这样做的吗?
    Supplement 1  ·  Dec 4, 2018

    找到一个类似的做法

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

    e..这个也是只读

    32 replies    2018-12-05 09:35:52 +08:00
    ccceeeooo
        1
    ccceeeooo  
    OP
       Nov 28, 2018
    自己回复一条骗大佬进来
    huoru
        2
    huoru  
       Nov 28, 2018
    @xiaochocking 宿主机起一个后端服务,接受 nodejs 网关的调用,从而执行宿主机脚本。
    cluulzz
        3
    cluulzz  
       Nov 28, 2018 via iPhone   ❤️ 1
    宿主跑 pm2
    你暴露了
    ccceeeooo
        4
    ccceeeooo  
    OP
       Nov 28, 2018
    @ChristopherWu 这样还有用 docker 跑 node 的必要吗..
    wfd0807
        5
    wfd0807  
       Nov 28, 2018
    应该不会有 docker 的原生解决方案
    shylockhg
        7
    shylockhg  
       Nov 28, 2018
    -v 不知道可以不
    Kilerd
        8
    Kilerd  
       Nov 28, 2018   ❤️ 1
    当然有啊。

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

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

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

    如果你希望在 docker 中控制(启动、终止、创建、删除)其他容器,只需要将宿主环境下的 /var/docker/docker.sock 挂载到容器内即可。
    vakara
        23
    vakara  
       Nov 28, 2018 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  
       Nov 28, 2018 via Android
    这个需求不诡异,一些监控功能的容器都是这样用的。
    yujincheng08
        25
    yujincheng08  
       Nov 28, 2018 via Android
    挂载目录,然后弄个管道。host 弄个监控教程 fork 然后执行命令?
    NotNil1
        26
    NotNil1  
       Nov 29, 2018
    @xiaochocking 可以的,我的可以
    julyclyde
        27
    julyclyde  
       Nov 29, 2018
    “用 docker ”是“穿上裤子再放那个本来应该光屁股的时候就放的屁”
    hotsymbol
        28
    hotsymbol  
       Nov 30, 2018
    到 Moby (原 Docker )提个 Issues 不就行了
    ccceeeooo
        29
    ccceeeooo  
    OP
       Dec 4, 2018
    @ljtletters   老哥你还做了什么步骤
    ccceeeooo
        30
    ccceeeooo  
    OP
       Dec 4, 2018
    @vakara  试了你那个方法 当我执行 touch 的时候 报 Read-only file system
    vakara
        31
    vakara  
       Dec 4, 2018 via Android
    @xiaochocking 你往哪里 touch 的?怎么执行的?
    ccceeeooo
        32
    ccceeeooo  
    OP
       Dec 5, 2018
    @vakara 就是你那句 nsenter --mount=/host/proc/1/ns/mnt sh -c "ls /root" ,list /root 改成 touch xxx
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1035 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 19:13 · PVG 03:13 · LAX 12:13 · JFK 15:13
    ♥ Do have faith in what you're doing.