docker exec

执行一个容器里面的命令。

docker exec的帮助:

docker exec的使用格式如下:

docker exec <containerName|containerId> <command>

docker exec的参数与docker run的参数有几个是相同的意思:

参数说明
-u <username|uid>指定进入的容器以哪个用户登陆,默认是root
-e <key=value>设置进入后可以使用的环境变量,这样动态指定比较灵活
-d以后台方式执行,这样,我们执行完这条命令,还可以干其他事情,写脚本最常用
-i以交互方式运行,是阻塞式的
-t分配一个伪终端,这个参数通常与-i参数一起使用,然后, 在后面跟上容器里的/bin/bash,这样就把我们带到容器里去了。

示例1:

sudo docker exec -u leleliu008 ubuntu ls ~

直接在宿主机中执行名称为ubuntu的容器里面的leleliu008用户的ls ~命令, 这样可以避免进入容器后再出来的时候,引起不必要的麻烦!

示例2:

sudo docker exec -u leleliu008 -it 3dada3f22bd2 /bin/bash

进入ubuntu的容器里面,以leleliu008用户权限!

退出容器要注意了,千万别使用exit命令,如果使用了exit命令,退出容器的同时把容器也停止掉了, 要想退出容器,还让容器继续运行,就得先使用CTRL + P再使用CTRL + Q快捷键, 这样就是退出容器但不停止容器!

如果该容器是生产环境的服务器,一不小心使用了exit命令,把容器给停止了,那就事大了!!所以,不建议直接进入容器做事情, 保险的方法还是在宿主机器中执行容器里的命令!

这么长的命令,每次都要敲多麻烦,实际上,你可以使用alias来给这么长的命令取个别名, 放在环境变量里面,以后就直接使用别名代替那么长的命令,如下:

alias docker-enter-ubuntu='sudo docker exec -u leleliu008 ubuntu'

从这里也可以看出,为什么要给容器起一个名字,用名字而不是containerId,在服务器上, 一般只会使用一个镜像创建一个容器,不会安装很多,所以,用名字更容易写脚本,而用containerId每次都要修改脚本,很麻烦。