05.Docker容器命令
- 电脑硬件
- 2025-08-22 13:24:01

Docker 容器命令 Docker 容器命令1. 启动容器用法2. 显示当前存在容器3. 查看容器内的进程4. 查看容器资源使用情况5. 查看容器的详细信息6. 删除容器7. 容器的启动和停止8. 给正在运行的容器发信号9. 进入正在运行的容器10. 暴露所有容器端口11. 指定端口映射12. 查看容器的日志13. 传递运行命令14. 容器内部的hosts文件15. 指定容器DNS16. 容器内和宿主机之间复制文件17. 传递环境变量18. 使用 systemd 控制容器运行 Docker 容器命令 1. 启动容器用法 [root@Ubuntu2204 ~]#docker run --help 用法: docker run [选项] 镜像 [命令] [参数...] docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 选项: --add-host list 添加自定义主机到 IP 的映射 (格式: host:ip) -a, --attach list 连接到标准输入、输出或错误流 --blkio-weight uint16 限制块设备 IO(相对权重),范围为 10 到 1000,或 0 表示禁用 (默认值: 0) --blkio-weight-device list 块设备 IO 权重(相对设备权重)(默认值: []) --cap-add list 添加 Linux 能力 --cap-drop list 删除 Linux 能力 --cgroup-parent string 容器的可选父 cgroup --cgroupns string 使用的 cgroup 命名空间 (host|private) 'host': 在 Docker 主机的 cgroup 命名空间中运行容器 'private': 在容器自己的私有 cgroup 命名空间中运行容器 '': 使用守护程序通过 default-cgroupns-mode 配置的 cgroup 命名空间 (默认值) --cidfile string 将容器 ID 写入文件 --cpu-period int 限制 CPU CFS(完全公平调度器)周期 --cpu-quota int 限制 CPU CFS(完全公平调度器)配额 --cpu-rt-period int 限制 CPU 实时周期(微秒) --cpu-rt-runtime int 限制 CPU 实时运行时间(微秒) -c, --cpu-shares int CPU 共享(相对权重) --cpus decimal CPU 数量 --cpuset-cpus string 允许执行的 CPU(格式: 0-3, 0,1) --cpuset-mems string 允许执行的内存节点(格式: 0-3, 0,1) -d, --detach 在后台运行容器并打印容器 ID --detach-keys string 覆盖分离容器的键序列 --device list 将主机设备添加到容器 --device-cgroup-rule list 向允许的设备列表中添加规则 --device-read-bps list 限制从设备读取的速度(每秒字节数)(默认值: []) --device-read-iops list 限制从设备读取的速度(每秒 IO 次数)(默认值: []) --device-write-bps list 限制写入设备的速度(每秒字节数)(默认值: []) --device-write-iops list 限制写入设备的速度(每秒 IO 次数)(默认值: []) --disable-content-trust 跳过镜像验证 (默认值: true) --dns list 设置自定义 DNS 服务器 --dns-option list 设置 DNS 选项 --dns-search list 设置自定义 DNS 搜索域 --domainname string 容器 NIS 域名 --entrypoint string 覆盖镜像的默认 ENTRYPOINT -e, --env list 设置环境变量 --env-file list 从文件中读取环境变量 --expose list 暴露端口或端口范围 --gpus gpu-request 添加到容器的 GPU 设备 ('all' 表示传递所有 GPU) --group-add list 添加额外的组加入 --health-cmd string 检查健康状态运行的命令 --health-interval duration 运行检查的时间间隔 (ms|s|m|h) (默认值: 0s) --health-retries int 报告不健康所需的连续失败次数 --health-start-period duration 容器初始化前的启动期,在此期间不会开始健康重试倒计时 (ms|s|m|h) (默认值: 0s) --health-timeout duration 允许单次检查运行的最大时间 (ms|s|m|h) (默认值: 0s) --help 打印使用说明 -h, --hostname string 容器主机名 --init 在容器内运行 init,转发信号并回收进程 -i, --interactive 即使未连接也保持标准输入打开 --ip string IPv4 地址 (例如: 172.30.100.104) --ip6 string IPv6 地址 (例如: 2001:db8::33) --ipc string 使用的 IPC 模式 --isolation string 容器隔离技术 --kernel-memory bytes 内核内存限制 -l, --label list 设置容器的元数据 --label-file list 从换行分隔的文件中读取标签 --link list 添加链接到另一个容器 --link-local-ip list 容器的 IPv4/IPv6 链接本地地址 --log-driver string 容器的日志驱动 --log-opt list 日志驱动选项 --mac-address string 容器的 MAC 地址 (例如: 92:d0:c6:0a:29:33) -m, --memory bytes 内存限制 --memory-reservation bytes 内存软限制 --memory-swap bytes 交换限制等于内存加交换: '-1' 表示启用无限交换 --memory-swappiness int 调整容器内存交换行为 (范围: 0 到 100) (默认值: -1) --mount mount 将文件系统挂载附加到容器 --name string 为容器分配名称 --network network 将容器连接到网络 --network-alias list 为容器添加网络作用域别名 --no-healthcheck 禁用容器指定的 HEALTHCHECK --oom-kill-disable 禁用 OOM Killer --oom-score-adj int 调整主机的 OOM 偏好 (范围: -1000 到 1000) --pid string 使用的 PID 命名空间 --pids-limit int 调整容器的 PIDs 限制 (设置为 -1 表示不限制) --platform string 如果服务器支持多平台,则设置平台 --privileged 给予此容器扩展权限 -p, --publish list 将容器的端口发布到主机 -P, --publish-all 将所有暴露的端口发布到随机端口 --pull string 在运行前拉取镜像 ("always"|"missing"|"never") (默认值: "missing") --read-only 以只读方式挂载容器的根文件系统 --restart string 容器退出时应用的重启策略 (默认值: "no") --rm 容器退出时自动删除容器 --runtime string 此容器使用的运行时 --security-opt list 安全选项 --shm-size bytes /dev/shm 的大小 --sig-proxy 将接收到的信号代理给进程 (默认值: true) --stop-signal string 停止容器的信号 (默认值: "SIGTERM") --stop-timeout int 停止容器的超时时间(秒) --storage-opt list 容器存储驱动选项 --sysctl map Sysctl 选项 (默认值: map[]) --tmpfs list 挂载 tmpfs 目录 -t, --tty 分配伪终端 --ulimit ulimit Ulimit 选项 (默认值: []) -u, --user string 用户名或 UID (格式: <name|uid>[:<group|gid>]) --userns string 使用的用户命名空间 --uts string 使用的 UTS 命名空间 -v, --volume list 绑定挂载卷 --volume-driver string 容器的可选卷驱动 --volumes-from list 从指定的容器挂载卷 -w, --workdir string 容器内的工作目录 注意: 容器启动后,如果容器内没有前台运行的进程,将自动退出停止。 [root@Ubuntu2204 ~]#docker run hello-world # 启动的容器在执行完 shell 命令就退出,用于测试 [root@Ubuntu2204 ~]#docker run alpine echo "HELLO" # 指定容器名称 [root@Ubuntu2204 ~]#docker run --name web1 nginx # 运行交互式容器并退出 [root@Ubuntu2204 ~]#docker run -it --name web2 nginx root@35a32e21d4a3:/# exit exit 注意:用 exit 退出后容器也停止,同时按三个键 ctrl+p+q 退出后容器不会停止。 # 一次性运行容器,退出后立即删除,用于测试 [root@Ubuntu2204 ~]#docker run --rm busybox ls / # 开机自动运行容器 [root@Ubuntu2204 ~]#docker run -d --name nginx --restart=always nginx [root@Ubuntu2204 ~]#reboot # 设置容器内的主机名 [root@Ubuntu2204 ~]#docker run -it --name b1 -h b1 busybox / # hostname b1
重启策略 --restart
策略描述no不要自动重启容器。(默认)on-failure[:max-retries]如果容器由于错误而退出,请重新启动容器,该错误表现为非零退出代码。(可选)使用该选项限制 Docker 守护程序尝试重新启动容器的次数。该策略仅在容器退出失败时提示重启。如果守护程序重新启动,它不会重新启动容器。always如果容器停止,请始终重新启动容器。如果手动停止,则仅当 Docker 守护程序重新启动或手动重新启动容器本身时,才会重新启动。unless-stopped当容器停止(手动或其他方式)时,即使在 Docker 守护程序重新启动后也不会重新启动。–privileged 选项
大约在 0.6 版,–privileged 选项被引入 docker。使用该参数,container 内的 root 拥有真正的 root 权限。 否则,container 内的 root只是外部的一个普通用户权限。privileged 启动的容器,可以看到很多 host 上的设备,并且可以执行 mount。甚至允许你在 docker 容器中启动 docker 容器。
什么是守护式容器: 能够长期运行 无需交互式会话 适合运行应用程序和服务
2. 显示当前存在容器 [root@Ubuntu2204 ~]#docker ps --help 用法: docker ps [选项] 列出容器 选项: -a, --all 显示所有容器(默认仅显示正在运行的容器) -f, --filter 过滤器 根据提供的条件过滤输出 --format 字符串 使用 Go 模板格式化容器输出 -n, --last 整数 显示最后创建的 n 个容器(包括所有状态)(默认值: -1) -l, --latest 显示最新创建的容器(包括所有状态) --no-trunc 不截断输出 -q, --quiet 仅显示容器 ID -s, --size 显示总文件大小 [root@Ubuntu2204 ~]#docker ps -a 3. 查看容器内的进程 [root@Ubuntu2204 ~]#docker top --help 用法: docker top 容器 [ps 选项] 显示容器中运行的进程 [root@Ubuntu2204 ~]#docker run -it --name web1 nginx:stable-alpine3.20-perl [root@Ubuntu2204 ~]#docker top web1 4. 查看容器资源使用情况 [root@Ubuntu2204 ~]#docker stats --help 用法: docker stats [选项] [容器...] 显示一个或多个容器资源使用情况的实时流 选项: -a, --all 显示所有容器(默认仅显示正在运行的容器) --format 字符串 使用 Go 模板格式化输出 --no-stream 禁用实时统计信息流,仅拉取第一个结果 --no-trunc 不截断输出 [root@Ubuntu2204 ~]#docker run -it --name web1 nginx:stable-alpine3.20-perl [root@Ubuntu2204 ~]#docker stats web1 5. 查看容器的详细信息docker inspect 可以查看 docker 各种对象的详细信息,包括:镜像,容器,网络等。
[root@Ubuntu2204 ~]#docker inspect --help 用法: docker inspect [选项] 名称|ID [名称|ID...] 选项: -f, --format 字符串 使用给定的 Go 模板格式化输出 -s, --size 如果类型为容器,则显示总文件大小 --type 字符串 返回指定类型的 JSON 数据 [root@Ubuntu2204 ~]#docker inspect web1 6. 删除容器docker rm 可以删除容器,即使容器正在运行当中,也可以被强制删除掉。
[root@Ubuntu2204 ~]#docker rm --help 用法: docker rm [选项] 容器 [容器...] 删除一个或多个容器 选项: -f, --force 强制删除正在运行的容器(使用 SIGKILL) -l, --link 删除指定的链接 -v, --volumes 删除与容器关联的匿名卷 [root@Ubuntu2204 ~]#docker container prune --help 用法: docker container prune [选项] 删除所有已停止的容器 选项: --filter 过滤器 提供过滤值(例如 'until=<时间戳>') -f, --force 不提示确认,直接执行 # 删除所有容器 [root@Ubuntu2204 ~]#docker rm -f `docker ps -a -q` [root@Ubuntu2204 ~]#docker ps -a -q | xargs docker rm -f 7. 容器的启动和停止 docker start|stop|restart|pause|unpause 名称|ID # 批量正常启动或关闭所有容器 [root@Ubuntu2204 ~]#docker start $(docker ps -a -q) [root@Ubuntu2204 ~]#docker stop $(docker ps -a -q) 8. 给正在运行的容器发信号docker kill 可以给容器发信号,默认号 SIGKILL,即 9 信号。
[root@Ubuntu2204 ~]#docker kill --help 用法: docker kill [选项] 容器 [容器...] 终止一个或多个正在运行的容器 选项: -s, --signal 字符串 发送到容器的信号 (默认为 "KILL") [root@Ubuntu2204 ~]#docker kill web1 9. 进入正在运行的容器使用 exec 命令,在运行中的容器启动新进程,可以执行单次命令,以及进入容器 测试环境使用此方式,使用 exit 退出,但容器还在运行。
[root@Ubuntu2204 ~]#docker exec --help 用法: docker exec [选项] 容器 名称 [参数...] 在运行中的容器内执行命令 选项: -d, --detach 分离模式:在后台运行命令 --detach-keys 字符串 覆盖分离容器的键序列 -e, --env 列表 设置环境变量 --env-file 列表 从文件中读取环境变量 -i, --interactive 即使未连接也保持标准输入打开 --privileged 给予命令扩展权限 -t, --tty 分配伪终端 -u, --user 字符串 用户名或 UID(格式: <name|uid>[:<group|gid>]) -w, --workdir 字符串 容器内的工作目录 #常见用法 docker exec -it 容器ID sh|bash [root@Ubuntu2204 ~]#docker exec -it fcd4687e3ba6 bash root@fcd4687e3ba6:/# exit exit 10. 暴露所有容器端口容器启动后,默认处于预定义的 NAT 网络中,所以外部网络的主机无法直接访问容器中网络服务 docker run -P 可以将事先容器预定义的所有端口映射宿主机的网卡的随机端口,默认从 32768 开始使用随机端口时,当停止容器后再启动可能会导致端口发生变化。
-P , --publish-all=true | false 默认为false # 映射容器所有暴露端口至随机本地端口 [root@Ubuntu2204 ~]#docker run -itd --name web3 -P nginx:stable-alpine3.20-perl # docker port 可以查看容器的端口映射关系 [root@Ubuntu2204 ~]#docker port web3 11. 指定端口映射docker run -p 可以将容器的预定义的指定端口映射到宿主机的相应端口
注意: 多个容器映射到宿主机的端口不能冲突,但容器内使用的端口可以相同
# 容器 80 端口映射到宿主机本地端口 81 [root@Ubuntu2204 ~]#docker run -p 81:80 --name nginx nginx # 修改已经创建的容器的端口映射关系 [root@Ubuntu2204 ~]#cat /var/lib/docker/containers/1e0f977af86bd0cf1f92e6c8b046b9fe146d731315ed1728a3929dbd43cbeb58/hostconfig.json PortBindings 后 80/tcp 对应的是容器内部的 80 端口,HostPort 对应的是映射到宿主机的端口 80 修改此处 "PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"80"}]}, 12. 查看容器的日志docker logs 可以查看容器中运行的进程在控制台输出的日志信息
[root@Ubuntu2204 ~]#docker logs --help 用法: docker logs [选项] 容器 获取容器的日志 选项: --details 显示日志提供的额外详细信息 -f, --follow 实时跟踪日志输出 --since 字符串 显示自某个时间戳以来的日志(例如:2013-01-02T13:23:37Z 或相对时间如 42m 表示 42 分钟前) -n, --tail 字符串 从日志末尾显示的行数(默认值: "all") -t, --timestamps 显示时间戳 --until 字符串 显示在某个时间戳之前的日志(例如:2013-01-02T13:23:37Z 或相对时间如 42m 表示 42 分钟前) 13. 传递运行命令容器需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令
容器里的 PID 为 1 的守护进程的实现方式
服务类: 如: Nginx,Tomcat,Apache ,但服务不能停命令类: 如: tail -f /etc/hosts ,主要用于测试环境,注意: 不要 tail -f <服务访问日志> 会产生不必要的磁盘 IO [root@Ubuntu2204 ~]#docker run -d alpine:3.21.2 tail -f /etc/hosts 14. 容器内部的hosts文件容器会自动将容器的 ID 加入自已的 /etc/hosts 文件中,并解析成容器的 IP
# 修改容器的 hosts文件 [root@Ubuntu2204 ~]#docker run -it --rm --add-host .aaa :8.8.8.8 busybox 15. 指定容器DNS容器的 dns 服务器,默认采用宿主机的 dns 地址,可以用下面方式指定其它的 DNS 地址
将 dns 地址配置在宿主机在容器启动时加选项 --dns=x.x.x.x在 /etc/docker/daemon.json 文件中指定注意:–dns 指定优先级更高
# 在容器启动时加选项指定 DNS 地址(--dns 8.8.8.8)、指定域名(--dns-search aaa ) [root@Ubuntu2204 ~]#docker run -it --rm --dns 8.8.8.8 --dns-search aaa busybox:latest / # cat /etc/resolv.conf search aaa nameserver 8.8.8.8 # 在 /etc/docker/daemon.json 文件中指定 [root@Ubuntu2204 ~]#vim /etc/docker/daemon.json { "dns" : [ "114.114.114.114", "119.29.29.29"], "dns-search": [ "aaa ", "bbb.org"] } [root@Ubuntu2204 ~]#systemctl restart docker 16. 容器内和宿主机之间复制文件 [root@Ubuntu2204 ~]#docker cp --help 用法: docker cp [选项] 容器:源路径 目标路径|- docker cp [选项] 源路径|- 容器:目标路径 在容器和本地文件系统之间复制文件/文件夹 使用 '-' 作为源,从标准输入读取 tar 归档文件,并将其解压到容器中的目录目标。 使用 '-' 作为目标,将容器源的 tar 归档文件流输出到标准输出。 选项: -a, --archive 归档模式(复制所有 uid/gid 信息) -L, --follow-link 始终在 SRC_PATH 中跟随符号链接 # 复制容器的文件至宿主机 [root@ubuntu2204 ~]#docker cp b1:/etc/hosts /root # 宿主机文件复制到容器内 [root@ubuntu2204 ~]#docker cp /etc/hosts b1:/root/ 17. 传递环境变量有些容器运行时,需要传递变量,可以使用 -e <参数> 或 --env-file <参数文件> 实现
变量参考链接: hub.docker /_/mysql
[root@ubuntu2204 ~]#docker run --name mysql -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.30 18. 使用 systemd 控制容器运行05.Docker容器命令由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“05.Docker容器命令”