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

docker 容器内执行宿主机命令

  •  
  •   ccceeeooo · Nov 28, 2018 · 17667 views
    This topic created in 2898 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
    ccceeeooo
    OP
    Nov 28, 2018
    1
    自己回复一条骗大佬进来
    huoru
    huoru
    Nov 28, 2018
    2
    @xiaochocking 宿主机起一个后端服务,接受 nodejs 网关的调用,从而执行宿主机脚本。
    cluulzz
    cluulzz
    Nov 28, 2018 via iPhone❤️1
    3
    宿主跑 pm2
    你暴露了
    ccceeeooo
    ccceeeooo
    OP
    Nov 28, 2018
    4
    @ChristopherWu 这样还有用 docker 跑 node 的必要吗..
    wfd0807
    wfd0807
    Nov 28, 2018
    5
    应该不会有 docker 的原生解决方案
    shylockhg
    shylockhg
    Nov 28, 2018
    7
    -v 不知道可以不
    Kilerd
    Kilerd
    Nov 28, 2018❤️1
    8
    当然有啊。

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

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

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

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

    如果需要网络数据的话用 nsenter --net=/host/proc/1/ns/net sh ...
    vakara
    vakara
    Nov 28, 2018 via Android
    24
    这个需求不诡异,一些监控功能的容器都是这样用的。
    yujincheng08
    yujincheng08
    Nov 28, 2018 via Android
    25
    挂载目录,然后弄个管道。host 弄个监控教程 fork 然后执行命令?
    NotNil1
    NotNil1
    Nov 29, 2018
    26
    @xiaochocking 可以的,我的可以
    julyclyde
    julyclyde
    Nov 29, 2018
    27
    “用 docker ”是“穿上裤子再放那个本来应该光屁股的时候就放的屁”
    hotsymbol
    hotsymbol
    Nov 30, 2018
    28
    到 Moby (原 Docker )提个 Issues 不就行了
    ccceeeooo
    ccceeeooo
    OP
    Dec 4, 2018
    29
    @ljtletters   老哥你还做了什么步骤
    ccceeeooo
    ccceeeooo
    OP
    Dec 4, 2018
    30
    @vakara  试了你那个方法 当我执行 touch 的时候 报 Read-only file system
    vakara
    vakara
    Dec 4, 2018 via Android
    31
    @xiaochocking 你往哪里 touch 的?怎么执行的?
    ccceeeooo
    ccceeeooo
    OP
    Dec 5, 2018
    32
    @vakara 就是你那句 nsenter --mount=/host/proc/1/ns/mnt sh -c "ls /root" ,list /root 改成 touch xxx
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2994 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 12:07 · PVG 20:07 · LAX 04:07 · JFK 07:07
    ♥ Do have faith in what you're doing.