跳到主要内容

docker exec 命令

docker exec 命令用于在运行中的 Docker 容器内执行命令。这个命令非常有用,让我们可以非常方便地进行调试、维护或者与容器中的服务进行交互。

docker exec 选项说明

docker exec [选项] 容器 命令 [命令参数]
  • -d:分离模式,在后台运行命令。
  • -i:即使没有附加也保持 STDIN 打开。
  • -t:分配一个伪终端。
  • -u:指定用户名或 UID。

docker exec 示例

  1. 在容器中运行 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
  1. 在容器中以交互模式运行 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:~$
  1. 在容器中以指定用户运行命令:
docker exec -u username -it mycontainer bash
  1. 在容器中运行 ping 命令,但不附加到终端:
docker exec -d mycontainer ping google.com
  1. 在容器中运行一个命令,并将输出重定向到文件:
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 命令中使用 CMDENTRYPOINT 指令。
  • 使用 docker exec 时,如果容器没有分配伪终端,某些命令可能不会按预期工作,特别是那些需要交互式环境的命令。