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
$