执行一个容器里面的命令。
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
每次都要修改脚本,很麻烦。