docker進入容器的幾種方法

一 啓動進入容器指定bash 退出後容器關閉node

[root@Centos-node3 ~]# docker run -it centos bash
[root@83c6b25aca09 /]# 

二 docker attach進入容器後退出 若是容器沒有指定bash環境會停留在空白頁面 退出後容器也會正常退出(進入容器後其餘人進入容器能夠看到你輸入的信息)linux

[root@Centos-node3 ~]# docker run -it -d --name mynginx nginx /bin/bash
c23ba383b76baa6c3e1a9450e23e6e4f46724a4e2b8e8c2b8c002e54ba2e5f32
[root@Centos-node3 ~]# docker attach mynginx
root@c23ba383b76b:/# ls
bin   dev  home  lib64    mnt  proc  run     srv  tmp  var
boot  etc  lib     media    opt  root  sbin  sys  usr
root@c23ba383b76b:/# exit
exit
[root@Centos-node3 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

三 docker exec 進入容器 會啓用一個bash環境nginx

[root@Centos-node3 ~]# docker run -it -d --name mycentos centos /bin/bash
68e1f711a4990f66ad3456b453591c3fa9a7d22d4fed3e50bda1cf27a36cc60a
[root@Centos-node3 ~]# docker exec -it mycentos bash
[root@68e1f711a499 /]# ps -ef
   PID TTY          TIME CMD
     1 ?        00:00:00 bash
    13 ?        00:00:00 bash
    25 ?        00:00:00 ps
[root@68e1f711a499 /]# exit  
exit
[root@Centos-node3 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
68e1f711a499        centos              "/bin/bash"         About a minute ago   Up About a minute                       mycentos
c23ba383b76b        nginx               "/bin/bash"         5 minutes ago        Up 2 minutes        80/tcp              mynginx

[root@Centos-node3 ~]# docker exec -it mycentos ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usrdocker

四 nsentercentos

yum -y install util-linux                         #安裝nsenter命令

[root@Centos-node3 ~]# docker inspect -f "{{ .State.Pid }}" mycentos
30428                                              #查看容器pidbash

nsenter -t 30428 -m -u -i -n -p -t:指定PID
–u:參數是進入到uts namespace中 
–i:參數是進入到System V IPC namaspace中 
–n:參數是進入到network namespace中 
–p:參數是進入到pid namespace中

腳本方式進入(可直接傳參docker name 或者ID)tcp

[root@Centos-node2 ~]# cat docker_in.sh 
#!/bin/bash

#Use nsenter to access docker

docker_in(){
    NAME_ID=$1
    PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID)
    nsenter -t $PID -m -u -i -n -p
}

docker_in $1
相關文章
相關標籤/搜索