赞
踩
不知道你有没有过这样的疑问,使用docker start启动了一个终止的容器,这仅仅只是启动了这个容器并执行了容器的“启动命令”,怎么进入这个容器的内部来操控容器呢??
本关的任务是学习如何进入一个正在运行的容器的内部,要求学习者参照示例,进入一个名为container2的容器内部,并在容器内部创建一个1.txt文件。
因为本关要使用docker run -d命令,所以在本关的开始,将花费少量篇幅介绍这条命令。
有些时候,需要让容器在后台运行而不是直接把“启动命令”的结果输出在当前宿主机下。此时,可以通过添加-d参数来实现。
举个例子,假如不使用-d参数执行下面这条命令:
docker run ubuntu /bin/sh -c “while true; do echo hello world; sleep
1; done”
那么会一直在控制台输出hello world,如下图所示:
但是如果使用了-d参数,此时容器会在后台运行并且不会将输出结果输出到控制台。如下图所示:
- docker run -d ubuntu /bin/sh -c “while true; do echo hello world;
sleep 1; done”- ccd644424bffed71747e2a36977d70745cc211e7dac71006437ca52914c1b743
在这里我只介绍Docker本身提供的工具,大家如果对其他的两种方式感兴趣,可以阅读扩展链接中的内容。
Docker目前主要提供了docker exec和docker attach两个命令。
- docker attach containerId|containerName
如下图所示,首先使用docker run创建了一个容器,为其分配了伪终端,打开了它的标准输入流,并且让它在后台执行。
然后使用docker attach进入了该容器内部,实际上就是进入容器“启动命令”的终端。(containerId可以不用输全,只要能代表容器即可。例如下面的0539就是代表容器ID以0539开头的容器,一般情况下,前4位就能唯一标识一个容器了)
2.docker exec [options] containerName|containerId command [arg]
如下图所示,首先使用docker run创建了一个容器,并使它在后台运行。
docker exec命令可以在一个运行的容器内部执行一条命令,例如下图中执行docker exec aec0 mkdir dir1后,就在容器中创建了一个dir1的文件夹。除此以外,还可以在容器中启动一个新的bash,例如下图执行了docker exec -it aec0 /bin/bash,在容器内部启动了一个新的bash终端,并使用-it为其分配一个伪终端绑定到标准输出上。
使用docker run -d ubuntu "while true ; do sleep 1 ; echo hello; done"创建并在后台启动容器,每隔一秒打印一个hello。
使用docker attach 5719进入容器内部后,会在控制台每隔一秒打印了一个hello。
但是使用docker exec –it 5719 /bin/bash进入容器后,并没有打印“hello”,因为docker exec执行后,在容器中打开一个新的终端,该终端与“启动命令”的终端不是同一个。
参考链接:
http://blog.csdn.net/cloudman6/article/details/72831143
http://blog.csdn.net/hemin1003/article/details/52815340
扩展链接:
http://www.cnblogs.com/xhyan/p/6593075.html
实验:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。