• Docker 多终端登录


    版权声明:starRTC免费im直播会议一对一视频,by elesos.com & starRTC.com https://blog.csdn.net/elesos/article/details/60958098

    Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH。如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可。当我启动了五个容器后,每个容器默认是没有配置SSH Server的,安装配置SSHD,映射容器SSH端口,实在是麻烦。 我发现很多Docker镜像都是没有安装SSHD服务的,难道有其他方法进入Docker容器?

    有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。

    使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。

    nsenter 可以访问另一个进程的名字空间。

    为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。

    PID=¥(docker inspect --format "{{ .State.Pid }}" <container>) //将<container>换成你的容器id通过这个 PID,就可以连接到这个容器:

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

    ¥ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
    ¥ echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc


    这个文件中定义了很多方便使用 Docker 的命令,例如 docker-pid 可以获取某个容器的 PID;而 docker-enter 可以进入容器或直接在容器内执行命令。

    ¥ echo ¥(docker-pid <container>)
    ¥ docker-enter <container>


    [编辑]附
    .bashrc_docker文件内容:

    # Some useful commands to use docker.# Author: yeasy@github# Created:2014-09-25
     
    alias docker-pid="sudo docker inspect --format '{{.State.Pid}}'"alias docker-ip="sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}'"
     
    #the implementation refs from https://github.com/jpetazzo/nsenter/blob/master/docker-enterfunction docker-enter(){if[-e ¥(dirname"¥0")/nsenter ]; then# with boot2docker, nsenter is not in the PATH but it is in the same folderNSENTER=¥(dirname"¥0")/nsenter
    elseNSENTER=nsenter
    fi[-z"¥NSENTER"]&&echo"WARN Cannot find nsenter"&&return
     
    if[-z"¥1"]; thenecho"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."elsePID=¥(sudo docker inspect --format"{{.State.Pid}}""¥1")if[-z"¥PID"]; thenecho"WARN Cannot find the given container"returnfishift
     
    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.#sudo ¥NSENTER "¥OPTS" su - rootsudo¥NSENTER--target¥PID--mount--uts--ipc--net--pidsu - root
    else# Use env to clear all host environment variables.sudo¥NSENTER--target¥PID--mount--uts--ipc--net--pidenv-i ¥@fifi}
    艺搜参考
    http://www.hjue.me/post/docker-nsenter

    http://yeasy.gitbooks.io/docker_practice/content/container/enter.html
    ---------------------
    作者:github.com/starRTC
    来源:CSDN
    原文:https://blog.csdn.net/elesos/article/details/60958098
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    12.4
    12.3
    学期总结
    12.20 期末考试总结
    12.18 准备
    12.17 CSS学习
    12.16 CSS学习
    12.15 CSS学习
    12.14 学习总结
    12.11 AJAX的基础知识
  • 原文地址:https://www.cnblogs.com/sddai/p/11122722.html
Copyright © 2020-2023  润新知