Attaching process to Docker libcontainer container

前端 未结 1 779
醉梦人生
醉梦人生 2021-02-04 14:17

In Docker releases previous to v0.9.0, you could attach(inject) a process into a container by using lxc-attach. For example:

docker run -d ubuntu:12.04
docker in         


        
相关标签:
1条回答
  • 2021-02-04 14:29

    Check if you have the nsenter tool. It should be in the util-linux package, after version 2.23. Note: unfortunately, Debian and Ubuntu still ship with util-linux 2.20.

    If you have nsenter, it's relatively easy. First, find the PID of the first process of the container (actually, any PID will do, but this is just easier and safer):

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

    Then, enter like this:

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

    Voilà! Note, however, that nsenter won't honor capabilities.

    If you don't have nsenter (e.g. if you are using Debian or Ubuntu, or your distro has too old util-linux), you can download util-linux and compile it. I have a nsenter binary, maybe I can upload it to the Docker registry if that could help anyone.

    Another option is to use nsinit, a helper tool for libcontainer. I don't think that there is a lot of documentation for nsinit since it's very new, but check https://asciinema.org/a/8090 for an example. You will need a Go build environment.

    0 讨论(0)
提交回复
热议问题