Docker实践(28) – 直接运行容器内的命令
在docker早期,许多用户添加SSH server到它们的镜像里,以便他们能通过外部的shell来访问容器。这样做的话相当于把容器当作虚拟机用了,添加了一个进程无疑增加了系统的开销。于是Docker引入了exec命令,提供了不需要安装ssh server直接在容器内执行命令的方法。下面我们介绍这个命令。
问题
你想在一个运行的容器内执行命令。
解决方法
使用docker exec命令。
讨论
为了演示exec命令,我们先在后台启动一个容器,名称为sleeper,仅执行一个sleep命令。
docker run -d --name sleeper debian sleep infinity
现在我们启动了一个容器,你可以在上面使用docker exec命令完成各种试验。exec命令有三种模式,如下:
基本模式 – 在命令行中同步运行容器中的命令 后台模式 – 后台执行容器中的命令 交互模式 – 执行一个命令,允许用户与之交互首先我们学习基本模式。下面的命令在容器sleeper内执行一个echo命令:
$ docker exec sleeper echo "hello host from container" hello host from container
有没有注意到这个命令的结构与docker run命令类似,只是我们给的ID是正式运行容器的ID而不是镜像ID。运行的echo命令是容器内的命令,不是主机上的。
后台模式是在后台运行命令,在你的终端不会看到输出。这个模式通常用于执行花费比较长的任务,并且不关心它的输出,如清除日志文件:
$ docker exec -d sleeper find / -ctime 7 -name '*log' -exec rm {} ;
最后是交互模式。通常用来执行一个shell,然后与之交互:
$ docker exec -i -t sleeper /bin/bash root@d46dc042480f:/#
版权声明:Docker实践(28) – 直接运行容器内的命令是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。