docker exec 命令
docker exec 命令用于在运行中的 Docker 容器内执行命令。这个命令非常有用,让我们可以非常方便地进行调试、维护或者与容器中的服务进行交互。
docker exec 选项说明
docker exec [选项] 容器 命令 [命令参数]
-d
:分离模式,在后台运行命令。-i
:即使没有附加也保持 STDIN 打开。-t
:分配一个伪终端。-u
:指定用户名或 UID。
docker exec 示例
- 在容器中运行
ls
命令:
# 查看在运行容器
ubuntu@zxzsk.com:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b56d52dd840a nginx "/docker-entrypoint.…" 16 minutes ago Up 15 minutes 0.0.0.0:32774->80/tcp, :::32774->80/tcp mystifying_meninsky
a6f06d0703ba wcjiang/reference "/busybox httpd -f -…" 16 minutes ago Up 15 minutes 0.0.0.0:32775->3000/tcp, :::32775->3000/tcp keen_zhukovsky
# 在容器内执行命令
ubuntu@zxzsk.com:~$ docker exec b56d52dd840a ls
bin
boot
dev
docker-entrypoint.d
docker-entrypoint.sh
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
- 在容器中以交互模式运行
bash
:
ubuntu@zxzsk.com:~$ docker exec -it b56d52dd840a bash
root@b56d52dd840a:/# ls /etc/nginx/
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
root@b56d52dd840a:/# exit
exit
ubuntu@zxzsk.com:~$
- 在容器中以指定用户运行命令:
docker exec -u username -it mycontainer bash
- 在容器中运行
ping
命令,但不附加到终端:
docker exec -d mycontainer ping google.com
- 在容器中运行一个命令,并将输出重定向到文件:
ubuntu@zxzsk.com:~$ ls
ubuntu@zxzsk.com:~$ docker exec b56d52dd840a cat /etc/hosts > hosts.txt
ubuntu@zxzsk.com:~$ ls
hosts.txt
注意事项
docker exec
命令只能在运行中的容器上使用。- 如果你想在容器启动时运行命令,你应该在
docker run
命令中使用CMD
或ENTRYPOINT
指令。 - 使用
docker exec
时,如果容器没有分配伪终端,某些命令可能不会按预期工作,特别是那些需要交互式环境的命令。