首页 > 其他分享 >宿主机 vim 编辑 docker 容器内部文件

宿主机 vim 编辑 docker 容器内部文件

时间:2023-06-09 17:25:09浏览次数:33  
标签:container exec 宿主机 pid vim docker local

容器所有文件,一定在宿主机某个位置。具体位置是:/proc/<container-pid>/root, 这个位置就是容器系统根目录所在的位置, 注意只有运行中的容器才有 pid,停止中的容器 pid 为 0。

查看一个容器 pid 可用命令

docker inspect -f '{{.State.Pid}}'  <container>   示例(注意:需要root 权限):

既然能找到文件,哪么就能用 sudo vim 或者 sudo gedit 去编辑文件了。

封装一下代码

####################################################################################
# 扩展 vim 能编辑容器中的文件
# 语法: vim <container>:/path/to/file
# 示例: vim nginx:/etc/nginx/nginx.conf
####################################################################################
function vim(){

    if [[ $# == 1 && "$1" =~ ":/"  ]];then

        local container="${1%:*}"
        local file=${1#*:/}
        local pid=$(docker inspect -f '{{.State.Pid}}' $container)
        [[ "$pid" == 0 ]] && {
            echo container $container is not running!
            return 0
        }
        sudo /usr/bin/vim /proc/$pid/root/$file

    else
        /usr/bin/vim "$@"
    fi

}


####################################################################################
# 扩展 exec 能实现 docker exec
# 语法: exec <container>:/path
# 示例: exec nginx:/etc/nginx
####################################################################################
function exec(){

    if [ $# == 1 -a -n "`echo $1 | grep -P '^\w+.*\:/'`" ]; then

        local work=(${1/:/' '}) #通过把替换成空格,从而转数组
        shift
        [ -n "$1" ] || set -- bash
        if [ -n "${work[1]}" ];then
            docker exec -it -w ${work[1]} ${work[0]} "$@"
        else
            docker exec -it ${work[0]} "$@"
        fi

    else

        builtin exec "$@"
    fi

}

####################################################################################
# 扩展 cd 能实现切换到 docker 容器中的目录
# 语法: cd <container>:/path
# 示例: cd nginx:/
# 示例: cd -down
####################################################################################
function cd(){
    # <container>:/
    if [[ $# == 1 && "$1" =~ ":/"  ]];then

        local container="${1%:*}"
        local path=${1#*:/}
        local pid=$(docker inspect -f '{{.State.Pid}}' $container)
        [[ "$pid" == 0 ]] && {
            echo container $container is not running!
            return 0
        }
        builtin cd /proc/$pid/root/$path
    else

        if [ $# == 1 -a ! -d "$1" -a "${1:0:1}" == '-' ];then

            set -- ${1:1}
            declare -A dest=(
                [src]='/d/src'
                [bin]='/d/bin'
                [desk]='/c/Users/admin/Desktop'
                [down]='/c/Users/admin/Downloads'
                [local]='/d/local'
                [xl]='/m/迅雷下载'
                [opt]='/d/opt'
                [nacos]='/d/opt/nacos'
                [keepalived]='/d/opt/keepalived'
            )

            [ -n "${dest[$1]}" ] && set -- ${dest[$1]}

        fi

        builtin cd "$@"

    fi

}

 

标签:container,exec,宿主机,pid,vim,docker,local
From: https://www.cnblogs.com/zbseoag/p/17469757.html

相关文章

  • Docker创建无密码ssh容器
    需求希望创建一个container进行调试,使用ssh登陆无需密码。实现Dockerfile如下FROMubuntu:20.04RUNpasswd-droot&&apt-getupdate&&\DEBIAN_FRONTEND=noninteractiveapt-getinstall-yq\s6ssh&&mkdir/run/sshd&&mkdir-p/etc/s6/ss......
  • 特定情况下docker run --restart=always重启失效的情况
    这是原cicd中使用的语句 在服务器reboot之后,可以看到服务没有随之重启。 通过dockerps-a--no-trunc可以看到--restart=always被当成arg放在了作为entry-point的脚本后面作为传参 这里做了一个猜想,将--restart=always置于dockerrun正后方,而非镜像名后,修改如下:......
  • docker命令
    Docker#常用命令(1)查看运行情况dockerps-a(2)日志查看dockerlogs-fIMAGE(3)进入容器dockerexec-itIMAGEsh(4)删除容器dockerrm-fIMAGE(5)退出容器exit(6)下载镜像dockerpullname:tag(7)查看本地已下载的镜像do......
  • amix vim vimrc 3.6 (部分修改)
    """"""""""""""""""""""""""""""""""""""""""&qu......
  • 使用CNI网络插件(calico)实现docker容器跨主机互联
    目录一.系统环境二.前言三.CNI网络插件简介四.常见的几种CNI网络插件对比五.Calico网络之间是如何通信的六.配置calico让物理机A上的docker容器c1可以访问物理机B上的docker容器c26.1安装部署etcd集群6.2安装部署docker6.3配置calico6.4使用Calico实现Docker容器跨主机互联七.......
  • 1、Docker介绍、组成、安装、运行容器的核心技术
    Dockerdocker的介绍和基础操作docker单机容器dockercompose单机多个容器k8s多机多个容器container即容器,集装箱docker就是搬运集装的码头工人,管理容器的管理工具Docker的组成Docker主机(Host):一个物理机或虚拟机,用于运行Docker服务进程和容器,也称为宿主机,node节点D......
  • 2、Docker二进制安装脚本
    #!/bin/bashDOCKER_VERSION=20.10.19#URL=https://mirrors.aliyun.comURL=https://download.docker.comprepare(){if[!-edocker-${DOCKER_VERSION}.tgz];then#wget${URL}/docker-ce/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz......
  • 3、Docker镜像管理(下载、删除、打标签、导出导入)
    镜像管理docker镜像是由一层一层的文件系统累积起来的容器的组成最下面:bootfs,引导文件系统,在镜像中不存在,用的是宿主机的内核然后是:rootfs,根文件系统,如centos/ubuntu接着:镜像(jdk)接着:镜像(tomcat)最后:可写容器(container)除了可写层,其他都是只读的。这种情况可以复用,如根文件......
  • 1、Docker二进制安装脚本
    #!/bin/bashDOCKER_VERSION=20.10.19#URL=https://mirrors.aliyun.comURL=https://download.docker.comprepare(){if[!-edocker-${DOCKER_VERSION}.tgz];then#wget${URL}/docker-ce/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz......
  • 修改docker镜像源
    修改docker镜像源原文:https://blog.csdn.net/skh2015java/article/details/82631633方法一:编辑/etc/docker/daemon.jsonvi/etc/docker/daemon.json#添加如下网易镜像源{"registry-mirrors":["http://hub-mirror.c.163.com"]}方法二:编辑/etc/sysconfig/docker......