root@797bce48e2ac:/# pwd
/
root@797bce48e2ac:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var
root@797bce48e2ac:/# cd /etc/
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
[iyunv@MSJTVL-MJSP-A35 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 23 seconds ago Up 21 seconds happy_morse
要获取容器的输出信息,可以通过docker logs命令。
[iyunv@MSJTVL-MJSP-A35 docker]# docker logs happy_morse
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
······ 终止容器
可以使用docker stop 来终止一个运行中的容器。
[iyunv@MSJTVL-MJSP-A35 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t About an hour ago Up 2 seconds happy_morse
[iyunv@MSJTVL-MJSP-A35 ~]# docker stop happy_morse
happy_morse
[iyunv@MSJTVL-MJSP-A35 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[iyunv@MSJTVL-MJSP-A35 ~]#
此外,当docker容器中指定的应用终结时,容器也自动终止。例如对于上面启动了一个终端的容器,用户通过exit命令或是ctrl + d 来退出终端时,所创建的容器会立刻终止。
终止状态的容器也用docker ps -a 命令看到。例如
[iyunv@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 10 minutes ago Up 10 minutes happy_morse
0f627067205b centos:14.04 "/bin/bash" 13 minutes ago Exited (0) 11 minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" 40 minutes ago Exited (0) 14 minutes ago stupefied_mclean
6ef0c8e046d9 unbutn:02.09 "/bin/echo 'Hello Wo 43 minutes ago Exited (0) 43 minutes ago boring_elion
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 43 minutes ago Exited (0) 43 minutes ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" 5 hours ago Exited (0) 5 hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" 5 hours ago Exited (127) 5 hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" 6 hours ago Exited (0) 6 hours ago high_lovelace
[iyunv@MSJTVL-MJSP-A35 docker]#
处于终止状态的容器,可以通过 docker start 命令来重新启动。
此外,docker restart 命令会将一个运行态的容器终止,然后再重新启动它。
[iyunv@MSJTVL-MJSP-A35 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t About an hour ago Up About an hour happy_morse
[iyunv@MSJTVL-MJSP-A35 docker]# docker attach happy_morse
hello world
hello world
hello world
hello world
hello world
···
但是使用attach命令有时候并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示。当某个窗口因为命令阻塞时,其他窗口也无法执行操作了。
[iyunv@MSJTVL-MJSP-A35 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t About an hour ago Exited (137) 9 minutes ago happy_morse
0f627067205b centos:14.04 "/bin/bash" About an hour ago Exited (0) About an hour ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" 2 hours ago Exited (0) About an hour ago stupefied_mclean
6ef0c8e046d9 unbutn:02.09 "/bin/echo 'Hello Wo 2 hours ago Exited (0) 2 hours ago boring_elion
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 2 hours ago Exited (0) 2 hours ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" 6 hours ago Exited (0) 6 hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" 7 hours ago Exited (127) 7 hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" 7 hours ago Exited (0) 7 hours ago high_lovelace
[iyunv@MSJTVL-MJSP-A35 ~]# docker start 0f627067205b
0f627067205b
[iyunv@MSJTVL-MJSP-A35 ~]# docker exec -ti 0f627067205b /bin/bash
[iyunv@0f627067205b /]# nsenter命令
安装
nsenter 工具在util-linux包2.23版本后包含。如果系统中没有util-linux包没有该命令,可以按照如下的方式从源码安装。
[iyunv@MSJTVL-MJSP-A35 tmp]# cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7451k 100 7451k 0 0 27704 0 0:04:35 0:04:35 --:--:-- 29805
[iyunv@MSJTVL-MJSP-A35 util-linux-2.24]# ./configure --without-ncurses
[iyunv@MSJTVL-MJSP-A35 util-linux-2.24]# make nsenter && cp nsenter /usr/local/bin
使用
nsenter可以访问另一个进程的名字空间。nsenter要正常工作需要有root权限。
为了使用nsenter连接到容器,还需要找到容器进程的PID,可以通过下面的命令获取:
[iyunv@MSJTVL-MJSP-A35 bin]# docker run -idt ubuntu:12.04
ef321bb21bb77b6dc9cf9c1069c400552631d776b607cb8beb07e0db81f65bdf
[iyunv@MSJTVL-MJSP-A35 bin]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" 15 seconds ago Up 14 seconds gloomy_ardinghelli
0f627067205b centos:14.04 "/bin/bash" 2 hours ago Up 52 minutes serene_poitras [iyunv@MSJTVL-MJSP-A35 bin]# PID=$(docker-pid ef321bb21bb7)
-bash: docker-pid: command not found 尝试这种方式好多次一直没有执行处理,具体操作如下,大家要是发现哪有问题还请多多指点,谢谢。 鉴于上面的方式不能查出容器的ID,那么咱换一直方式:
[iyunv@MSJTVL-MJSP-A35 ~]# docker top ef321bb21bb7
UID PID PPID C STIME TTY TIME CMD
root 26205 6841 0 19:02 pts/4 00:00:00 /bin/bash
查出容器的ID是26205,接下来用nsenter登录
root@ef321bb21bb7:/# logout
[iyunv@MSJTVL-MJSP-A35 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" 34 minutes ago Up 34 minutes gloomy_ardinghelli
0f627067205b centos:14.04 "/bin/bash" 3 hours ago Up About an hour serene_poitras 导出和导入容器
[iyunv@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" About an hour ago Up 24 minutes gloomy_ardinghelli
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 3 hours ago Exited (137) 2 hours ago happy_morse
0f627067205b centos:14.04 "/bin/bash" 4 hours ago Exited (1) 25 minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" 4 hours ago Exited (0) 4 hours ago stupefied_mclean
6ef0c8e046d9 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 hours ago boring_elion
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 hours ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" 8 hours ago Exited (0) 8 hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" 9 hours ago Exited (127) 9 hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" 9 hours ago Exited (0) 9 hours ago high_lovelace
[iyunv@MSJTVL-MJSP-A35 docker]# docker rm 6ef0c8e046d9
6ef0c8e046d9
[iyunv@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" About an hour ago Up 25 minutes gloomy_ardinghelli
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 3 hours ago Exited (137) 2 hours ago happy_morse
0f627067205b centos:14.04 "/bin/bash" 4 hours ago Exited (1) 25 minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" 4 hours ago Exited (0) 4 hours ago stupefied_mclean
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 hours ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" 8 hours ago Exited (0) 8 hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" 9 hours ago Exited (127) 9 hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" 10 hours ago Exited (0) 9 hours ago high_lovelace
[iyunv@MSJTVL-MJSP-A35 docker]#
如果删除一个运行中的容器,可以添加-f参数。Docker会发送SIGKILL信号给容器,终止其中的应用
[iyunv@MSJTVL-MJSP-A35 docker]# docker run -d ubuntu:12.04 /bin/sh -c "while true;do echo hello world;sleep 1;done"
d677c7bb29203e770c23a745b7a5ac4dbb3891c467908fd1ab999e4b54e8a25e
[iyunv@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d677c7bb2920 ubuntu:12.04 "/bin/sh -c 'while t 5 seconds ago Up 3 seconds backstabbing_mayer
ef321bb21bb7 ubuntu:12.04 "/bin/bash" About an hour ago Up 32 minutes gloomy_ardinghelli
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 4 hours ago Exited (137) 2 hours ago happy_morse
0f627067205b centos:14.04 "/bin/bash" 4 hours ago Exited (1) 32 minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" 4 hours ago Exited (0) 4 hours ago stupefied_mclean
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 3 minutes ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" 9 hours ago Exited (0) 9 hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" 9 hours ago Exited (127) 9 hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" 10 hours ago Exited (0) 10 hours ago high_lovelace
[iyunv@MSJTVL-MJSP-A35 docker]# docker rm backstabbing_mayer
Error response from daemon: Cannot destroy container backstabbing_mayer: Conflict, You cannot remove a running container. Stop the container before attempting removal or use -f
Error: failed to remove containers: [backstabbing_mayer]
[iyunv@MSJTVL-MJSP-A35 docker]# docker rm -f backstabbing_mayer
backstabbing_mayer
[iyunv@MSJTVL-MJSP-A35 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef321bb21bb7 ubuntu:12.04 "/bin/bash" About an hour ago Up 33 minutes gloomy_ardinghelli
dd94131ba7cc ubuntu:12.04 "/bin/sh -c 'while t 4 hours ago Exited (137) 2 hours ago happy_morse
0f627067205b centos:14.04 "/bin/bash" 4 hours ago Exited (1) 33 minutes ago serene_poitras
797bce48e2ac unbutn:02.09 "/bin/bash" 4 hours ago Exited (0) 4 hours ago stupefied_mclean
64641a698106 unbutn:02.09 "/bin/echo 'Hello Wo 4 hours ago Exited (0) 4 minutes ago berserk_feynman
5b098fe766ca ubuntu:12.04 "/bin/bash" 9 hours ago Exited (0) 9 hours ago cranky_einstein
c8c413078420 ubuntu:12.04 "/bin/bash" 9 hours ago Exited (127) 9 hours ago compassionate_colden
d67d32057f1c ubuntu:12.04 "/bin/bash" 10 hours ago Exited (0) 10 hours ago high_lovelace
[iyunv@MSJTVL-MJSP-A35 docker]#