docker-enter进入docker容器

问题

在使用docker-enter之前要想进入docker容器, 需要使用docker attach docker-name来进入docker.

这样进入docker容器的话, 必须使用ctrl + P ctrl + Q来退出容器, 如果直接exit的话, 会导致docker容器停掉(效果类似docker stop docker-name).

解决方案

由于docker使用了linux中命名空间技术, 因而可以使用nsenter来进行命名空间的切换, 而nsenter包含在util-linux包中, 需要在较新的版本中才支持, 经过测试2.25可用.

首先判断自己系统中有没有nsenter, 如果有则直接添加docker-enter脚本, 否则需要安装nsenter.

nsenter安装

要安装nsenter, 只执行以下命令即可

# 安装相关依赖
sudo apt-get install autopoint autoconf libtool automake make

# 下载util-linux源码包
cd /tmp
curl https://www.kernel.org/pub/linux/utils/util-linux/v2.25/util-linux-2.25.tar.gz
tar zxvf util-linux-2.25.tar.gz
cd util-linux-2.25

# 编译并安装
sudo ./configure --without-python --disable-all-programs --enable-nsenter --without-ncurses
sudo make nsenter
sudo cp nsenter /usr/local/bin

docker-enter脚本安装

docker-enter命令其实就是一个bash脚本, 放到/usr/local/bin目录下面, 内容如下:

#!/bin/sh

if [ -e $(dirname "$0")/nsenter ]; then
    NSENTER=$(dirname "$0")/nsenter
else
    NSENTER=nsenter
fi

if [ -z "$1" ]; then
    echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]"
    echo ""
    echo "Enters the Docker CONTAINER and executes the specified COMMAND."
    echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
else
    PID=$(docker inspect --format "{{.State.Pid}}" "$1")
    if [ -z "$PID" ]; then
        exit 1
    fi
    shift

    OPTS="--target $PID --mount --uts --ipc --net --pid --"

    if [ -z "$1" ]; then
        # No command given.
        # Use su to clear all host environment variables except for TERM,
        # initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
        # and start a login shell.
        "$NSENTER" $OPTS su - root
    else
        # Use env to clear all host environment variables.
        "$NSENTER" $OPTS env --ignore-environment -- "$@"
    fi
fi

使用

要想进入docker容器, 直接docker-enter docker-name即可;

退出的话, 则直接exit, 这样操作不会造成docker容器的停止, 是安全的.

转载于:https://my.oschina.net/alazyer/blog/818968

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值