docker-enter (docker-attach) 脚本
我写了一个名为docker-enter(docker-attach)的脚本,以便轻松地使用nsenter。
并且我们已经安装了最新版本361.0.0的CoreOS Alpha发布。
追加说明:已将boot2docker集成其中。
yungsang/boot2docker 可以换成 Docker Toolkit 或者 Docker Desktop。
#!/bin/sh
print_usage() {
echo "Usage: $(basename $0) <container id/name> [{command:-$SHELL} [argments...]]"
}
ID="$1"
if [ -z "$ID" ] ; then
print_usage >&2
exit 1
fi
shift
PID=$(docker inspect --format '{{.State.Pid}}' "$ID" 2> /dev/null)
if [ -z "$PID" -o "$PID" = "0" ] ; then
echo "$ID: no such container is running" >&2
exit 1
fi
echo nsenter --target $PID --mount --uts --ipc --net --pid -- "$@"
sudo nsenter --target $PID --mount --uts --ipc --net --pid -- "$@"
我对最后的$@处理有点在意。
— 经过修正,现在变得更简洁了。
参考:https://github.com/YungSang/docker-attach
请提供以下内容的中文本地化描述,只需一种选择:
$ vagrant init yungsang/coreos-alpha -m
$ vagrant up
$ vagrant ssh
______ ____ _____
/ ____/___ ________ / __ \/ ___/
/ / / __ \/ ___/ _ \/ / / /\__ \
/ /___/ /_/ / / / __/ /_/ /___/ /
\____/\____/_/ \___/\____//____/
(alpha 361.0.0)
core@localhost ~ $ docker-enter
Usage: docker-enter <container id/name> [{command:-/bin/bash} [argments...]]
core@localhost ~ $ docker run -d yungsang/busybox nc -p 8080 -l -l -e echo hello world!
core@localhost ~ $ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a1f6106a222 yungsang/busybox:latest nc -p 8080 -l -l -e 27 seconds ago Up 27 seconds dreamy_kowalevski
core@localhost ~ $ docker-enter $(docker ps -l -q) sh
nsenter --target 636 --mount --uts --ipc --net --pid sh
/ # ps
PID USER COMMAND
1 root nc -p 8080 -l -l -e echo hello world!
7 root sh
8 root ps
/ # exit
core@localhost ~ $ exit
$ vagrant ssh -c 'docker-enter $(docker ps -l -q) sh'
nsenter --target 636 --mount --uts --ipc --net --pid sh
/ # exit
$