将进程附加到Docker libcontainer容器

 哀公家园_678 发布于 2023-01-18 16:42

在v0.9.0之前的Docker版本中,您可以使用lxc-attach将进程附加(注入)到容器中.例如:

docker run -d ubuntu:12.04
docker inspect {{containerhash}} | grep ID
// "ID": "d846ae242838de66f12414fbc8807acb3c77778bdb81babab7115261f4242284"
sudo lxc-attach -n d846ae242838de66f12414fbc8807acb3c77778bdb81babab7115261f4242284 -- /bin/bash

由于0.9.0切换到libcontainer,这不再有效.

我们怎么能通过libcontainer来做到这一点?

有一个选项可以通过启动选项切换到lxc,但我想知道如何通过libcontainer实现这一点.

1 个回答
  • 检查您是否有该nsenter工具.它应该util-linux在版本2.23之后的软件包中.注意:不幸的是,Debian和Ubuntu仍然附带util-linux 2.20.

    如果你有nsenter,那就相对容易了.首先,找到容器第一个进程的PID(实际上,任何PID都可以,但这更简单,更安全):

    PID=$(docker inspect --format '{{.State.Pid}}' my_container_id)
    

    然后,输入如下:

    nsenter --target $PID --mount --uts --ipc --net --pid
    

    瞧!但请注意,nsenter不会尊重功能.

    如果你没有nsenter(例如,如果你使用的是Debian或Ubuntu,或者你的发行版有太旧的util-linux),你可以下载util-linux并编译它.我有一个nsenter二进制文件,也许我可以将它上传到Docker注册表,如果这可以帮助任何人.

    另一个选择是使用nsinitlibcontainer的帮助工具.我不认为有很多文档,nsinit因为它是非常新的,但请查看https://asciinema.org/a/8090作为示例.您将需要Go构建环境.

    2023-01-18 16:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有