gpt4 book ai didi

docker - 将进程附加到 Docker libcontainer 容器

转载 作者:IT老高 更新时间:2023-10-28 21:20:34 26 4
gpt4 key购买 nike

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

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 来实现。

最佳答案

检查您是否有 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 注册表。

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

关于docker - 将进程附加到 Docker libcontainer 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22338509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com