一、 Docker命令docker命令帮助[rootlocalhost ~]# docker --help Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Common Commands: run Create and run a new container from an image exec Execute a command in a running container ps List containers build Build an image from a Dockerfile pull Download an image from a registry push Upload an image to a registry images List images login Log in to a registry logout Log out from a registry search Search Docker Hub for images version Show the Docker version information info Display system-wide information Management Commands: builder Manage builds buildx* Docker Buildx (Docker Inc., v0.11.2) checkpoint Manage checkpoints compose* Docker Compose (Docker Inc., v2.21.0) container Manage containers context Manage contexts image Manage images manifest Manage Docker image manifests and manifest lists network Manage networks plugin Manage plugins system Manage Docker trust Manage trust on Docker images volume Manage volumes Swarm Commands: config Manage Swarm configs node Manage Swarm nodes secret Manage Swarm secrets service Manage Swarm services stack Manage Swarm stacks swarm Manage Swarm Commands: attach Attach local standard input, output, and error streams to a running container commit Create a new image from a containers changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a containers filesystem events Get real time events from the server export Export a containers filesystem as a tar archive history Show the history of an image import Import the contents from a tarball to create a filesystem image inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images save Save one or more images to a tar archive (streamed to STDOUT by default) start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers wait Block until one or more containers stop, then print their exit codes Global Options: --config string Location of client config files (default /root/.docker) -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with docker context use) -D, --debug Enable debug mode -H, --host list Daemon socket to connect to -l, --log-level string Set the logging level (debug, info, warn, error, fatal) (default info) --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default /root/.docker/ca.pem) --tlscert string Path to TLS certificate file (default /root/.docker/cert.pem) --tlskey string Path to TLS key file (default /root/.docker/key.pem) --tlsverify Use TLS and verify the remote -v, --version Print version information and quit Run docker COMMAND --help for more information on a command. For more help on how to use Docker, head to https://docs.docker.com/go/guides/docker常用子命令命令字含义run从镜像创建并运行新的容器exec在运行的容器中执行命令ps列出容器build从Dockerfile构建镜像pull从注册库下载镜像push将镜像上传到注册库images列出镜像login登录到注册库logout从注册库登出search在Docker Hub搜索镜像version显示Docker版本信息info显示系统全局信息docker管理子命令命令字含义builder用于管理构建。buildxDocker Buildx是一个可扩展的构建工具用于构建复杂镜像支持多种构建环境。checkpoint用于管理检查点。compose用于Docker Compose这是一个用于定义和部署多容器应用程序的工具。container用于管理容器。context用于管理上下文。image用于管理镜像。manifest用于管理Docker镜像清单和清单列表。network用于管理网络。plugin用于插件管理。system用于管理系统级别的设置和配置。trust用于管理Docker镜像的信任关系如标记、存储库检查等。swarm集群管理子命令命令字含义config管理Swarm配置。可以使用此子命令创建、更新、删除Swarm的配置文件。node管理Swarm节点。可以使用此子命令查看、添加、删除、重启、升级和管理节点。secret管理Swarm密钥。可以使用此子命令创建、查看、删除和管理Swarm中的密钥。service管理Swarm服务。可以使用此子命令创建、删除、启动、停止、重启和管理服务。stack管理Swarm堆栈。可以使用此子命令创建、删除、列表和管理堆栈。swarm管理Swarm集群。可以使用此子命令查看、启用、禁用、重启和管理Swarm集群。docker容器管理子命令命令字含义attach将本地标准输入、输出和错误流附加到正在运行的容器。commit从容器中的更改创建一个新的镜像。cp在容器和本地文件系统之间复制文件/文件夹。create基于镜像创建一个容器但该容器不会启动默认处于“created”状态diff查看容器文件系统或目录的更改。events获取来自服务器的实时事件。export导出容器的文件系统为tar归档。history显示镜像的历史记录。import从tar包导入内容以创建文件系统镜像。inspect返回Docker对象的低级别信息。kill杀死一个或多个运行的容器。load从tar归档加载镜像。logs获取容器的日志。pause暂停一个或多个容器的所有进程。port列出容器端口映射或特定的映射。rename重命名容器。restart重新启动一个或多个容器。rm删除一个或多个容器。rmi删除一个或多个镜像。save保存一个或多个镜像到tar归档默认情况下作为流传输到标准输出。 -o指定输出目标路径start启动一个或多个已停止的容器。stats显示实时流容器资源使用统计信息。stop停止一个或多个运行的容器。tag为镜像创建一个标签该标签引用另一个镜像。top显示正在运行的进程的容器。unpause在一个或多个容器中恢复所有进程。update更新一个或多个容器的配置。wait阻塞直到一个或多个容器停止然后打印它们的退出代码。docker全局选项命令字含义--config string指定客户端配置文件的路径默认是/root/.docker。-c, --context string指定用于连接到Docker daemon的上下文的名称。这个选项会覆盖DOCKER_HOST环境变量和通过docker context use设定的默认上下文。-D, --debug启用调试模式提供更多的日志信息。-H, --host list指定要连接到Docker daemon的套接字。-l, --log-level string设置日志级别如debug, info, warn, error, fatal。默认是info。--tls使用TLS由 --tlsverify 选项隐含。--tlscacert string只信任由该CA签名的证书。--tlscert string指定TLS证书文件的路径。--tlskey string指定TLS密钥文件的路径。--tlsverify使用TLS并验证远程服务器。-v, --version打印版本信息并退出。二、 docker镜像管理概述docker镜像是docker的核心概念之一它是用来构建和运行docker容器的模板。类似于虚拟机镜像可以理解为一个面向Docker引擎的只读模板包含了文件系统。 例如一个镜像可以包含一个完整的Ubuntu操作系统环境可以把它称为一个Ubuntu镜像。镜像也可以安装了Apache应用程序可以把它称为一个Apache镜像。 镜像是创建Docker容器的基础。通过版本管理和增量的文件系统Docker提供了一套十分简单的机制来创建和更新现有的镜像用户甚至可以从网上下载一个已经做好的应用镜像并通过简单的命令就可以直接使用。镜像自身是只读的。容器从镜像启动的时候Docker会在镜像的最上层创建一个可写层镜像本身将保持不变。核心概念概念含义镜像标签每个镜像都可以有一个或多个标签用于区分不同版本的镜像标签一般由两部分组成中间用冒号分隔例如ubuntu:15.04镜像层镜像是由多个镜像层Layers组成的每个镜像层包含了一个文件系统的增量修改比如新增、删除或修改文件当docker启动一个容器时会将这些镜像层叠加在一起形成一个完整的文件系统DockerfileDockerfile是用来构建docker镜像的文本文件其中包含了一系列构建指令比如FROM、RUN、COPY等通过Dockerfile可以自动化构建和发布docker镜像镜像仓库镜像仓库是用来存储和管理Docker镜像的系统可以是公共的或私有的。私有镜像仓库通常用于企业内部部署应用程序或保护敏感数据而公共镜像仓库则可供开发者和用户使用。Docker Hub是Docker官方的公共镜像仓库包含了大量常用的Docker镜像可以方便地查找和下载镜像同时Docker Hub也支持用户上传和分享自己构建的Docker镜像镜像的分层docker镜像分为四层如下图所示镜像分层后的优势共享宿主机的kernelbase镜像提供的是最小的Linux发行版base镜像不同发行版的/文件系统同一docker主机支持运行多种Linux发行版采用分层结构的最大好处是共享资源镜像通过分层如果本地已经有了不管这一层属于哪个镜像因为每一层都有独立的标识都是唯一的只要docker判断有这一层那它就不会进行重复的拉取。包括在上传仓库的时候也是一样的仓库内存储时也是按照层来存储的如果远程仓库有这一层了就不需要重复上传了节省了带宽。镜像的特点docker使用Copy-on-Write的机制可写容器层cow当我们想保存一个数据的时候由于镜像是只读的当我们创建容器时是在镜像层的上面创建一个可写容器层所有对容器的修改都会放置在可写容器层上只要这个容器不被释放这个数据一直存在除非把这个容器删掉。如果想保存把可写容器层进行打包即把它创建成一个镜像层一旦成为镜像层它就变成只读模式了最多127层。镜像层数量可能会很多所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件比如 /a上层的 /a会覆盖下层的 /a也就是说用户只能访问到上层中的文件 /a。在容器层中用户看到的是一个叠加之后的文件系统。添加文件在容器中创建文件时新文件被添加到容器层中;读取文件在容器中读取某个文件时Docker会从上往下依次在各镜像层中查找此文件。一旦找到立即将其复制到容器层然后打开并读入内存;修改文件在容器中修改已存在的文件时Docker 会从上往下依次在各镜像层中查找此文件。一旦找到立即将其复制到容器层然后修改之;删除文件在容器中删除文件时Docker 也是从上往下依次在镜像层中查找此文件。找到后会在容器层中记录下此删除操作;只有当需要修改时才复制一份数据这种特性被称作Copy-on-Write。可见容器层保存的是镜像变化的部分不会对镜像本身进行任何修改。这样就解释了我们前面提出的问题容器层记录对镜像的修改所有镜像层都是只读的不会被容器修改所以镜像可以被多个容器共享。镜像的表示镜像的表示分为四部分红色的部分是镜像中心域名黄色的部分是镜像命名空间我们可以根据命名空间进行权限控制等操作绿色是镜像的名称每个镜像有一个版本即标签。蓝色表示版本laest是最新版Docker官方的镜像不需要镜像中心的域名有一些镜像可以省略命名空间。镜像制作方式方式说明DockerfileDockerfile是一种文本文件其中包含了一系列构建指令比如FROM、RUN、COPY等可以自动化构建和发布Docker镜像本地文件可以使用docker load命令将本地文件系统的备份文件导入为Docker镜像该备份文件可以使用docker容器生成可以使用docker commit命令从已有的Docker容器创建新的Docker镜像镜像仓库下载DockerHub是Docker官方的公共镜像仓库可以从中下载现成的Docker镜像然后根据需要进行修改和定制除了DockerHub还有其他第三方镜像仓库也可以从中下载Docker镜像但需要注意镜像的来源和安全性镜像管理命令命令描述举例docker images列出本地所有镜像docker imagesdocker search在Docker Hub上搜索镜像docker search nginxdocker pull下载镜像docker pull nginxdocker push上传镜像到Docker Hub或其他镜像仓库docker push username/repo:tagdocker build使用Dockerfile构建新的镜像docker build -t myimage:latest .docker tag为镜像设置标签docker tag myimage:latest myimage:v1.0docker rmi删除镜像docker rmi myimage:latestdocker inspect查看镜像的详细信息docker inspect myimage:latestdocker history查看镜像的历史记录docker history myimage:latestdocker save将镜像保存为tar文件docker save myimage:latest -o myimage.tardocker load从tar文件中加载镜像docker load -i myimage.tardocker commit将容器提交为新的镜像docker commit container_id myimage:v1.0docker import从tar文件中导入镜像docker import myimage.tar myimage:v1.0docker images 显示解析仓库名 标签 镜像ID 创建时间 镜像大小 REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 2 years ago 13.3kBdocker history命令命令语法docker history [OPTIONS] IMAGE命令字选项docker history--format string使用自定义模板来格式化输出table以带有列标题的表格格式打印输出默认值table TEMPLATE使用给定的Go模板以表格格式打印输出json以JSON格式打印输出TEMPLATE使用给定的Go模板打印输出。-H, --human以可读的格式打印大小和日期默认为true--no-trunc不截断输出-q, --quiet仅显示镜像IDDockerHub开源应用程序非常多打包这些应用往往是重复的劳动。为了避免这些重复劳动人们就会将自己打包的应用镜像例如Redis、MySQL镜像放到网络上共享使用就像GitHub的代码共享一样。DockerHubDockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。国内也有类似于DockerHub 的公开服务比如 网易云镜像服务、阿里云镜像库等。课堂练习需求去DockerHub搜索并拉取一个Redis镜像 操作 1去DockerHub搜索Redis镜像 2查看Redis镜像的名称和版本 3利用docker pull命令拉取镜像 4利用docker save命令将 redis:latest打包为一个redis.tar包 5利用docker rmi 删除本地的redis:latest 6利用docker load 重新加载 redis.tar文件三、容器管理概述Docker容器Container类似于一个轻量级的沙箱Docker利用容器来运行和隔离应用。 容器是从镜像创建的应用运行实例可以将其启动、开始、停止、删除而这些容器都是相互隔离、互不可见的。 可以把容器看做一个简易版的Linux系统环境包括root用户权限、进程空间、用户空间和网络空间等以及运行在其中的应用程序打包而成的应用盒子。容器的实质是进程但与直接在宿主执行的进程不同容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里使用起来就好像是在一个独立于宿主的系统下操作一样。容器操作命令docker run 命令命令语法docker run [OPTIONS] IMAGE [COMMAND] [ARG...]命令字选项docker run--name Name 容器名字-d--detach 以后台方式运行并且返回ID启动守护进程式容器-i 使用交互方式运行容器通常与t同时使用--privileged 赋予命令扩展权限,一般使用的命令是/usr/sbin/init-t,--tty 为容器重新分配一个伪输入终端。也即启动交互式容器-p 指定容器端口 -p 物理机端口:容器端口-P 随机指定端口-v 给容器挂载存储卷-a,--attach list将容器附加到标准输入、标准输出或标准错误。[STDIN/STDOUT/STDERR]-- private在自己独立的cgroup命名空间中运行容器。-e, --env list设置环境变量。-h, --hostname string容器的主机名。--init在容器内运行一个init进程用于信号转发和进程清理工作。某些镜像不支持牺牲性能--restart string容器退出时要应用的重启策略默认为no。 on-failure容器出错后重启 always不论如何退出都重启 unless-stopped不管什么退出状态都重启--rm当容器退出时自动删除容器。--add-host 列表 添加自定义主机到 IP 的映射主机IP --annotation 映射 向容器添加注释传递给 OCI 运行时 默认映射列表为空 [] -a, --attach 列表 附加到标准输入STDIN、标准输出STDOUT或标准错误STDERR --blkio-weight 无符号 16 位整数 块 I/O相对权重取值范围在 10 到 1000 之间或设为 0 禁用 默认值为 0 --blkio-weight-device 列表 块 I/O 权重相对设备权重默认列表为空 [] --cap-add 列表 添加 Linux 功能 --cap-drop 列表 移除 Linux 功能 --cgroup-parent 字符串 容器可选的父 cgroup --cgroupns 字符串 要使用的 cgroup 命名空间主机 | 私有 主机 在 Docker 主机的 cgroup 命名空间中运行容器 私有 在容器自身的私有 cgroup 命名空间中运行容器 使用守护进程上默认的 cgroupns-mode 选项所配置的 cgroup 命名空间默认情况 --cidfile 字符串 将容器 ID 写入文件 --cpu-period 整数 限制 CPU 的 CFS完全公平调度器周期 --cpu-quota 整数 限制 CPU 的 CFS完全公平调度器配额 --cpu-rt-period 整数 以微秒为单位限制 CPU 实时周期 --cpu-rt-runtime 整数 以微秒为单位限制 CPU 实时运行时间 -c, --cpu-shares 整数 CPU 份额相对权重 --cpus 十进制数 CPU 数量 --cpuset-cpus 字符串 允许执行的 CPU格式如 0-3、0,1 --cpuset-mems 字符串 允许执行的内存格式如 0-3、0,1 -d, --detach 在后台运行容器并打印容器 ID --detach-keys 字符串 覆盖用于分离容器的按键序列 --device 列表 向容器添加主机设备 --device-cgroup-rule 列表 向 cgroup 允许的设备列表中添加规则 --device-read-bps 列表 限制从设备读取的速率每秒字节数默认列表为空 [] --device-read-iops 列表 限制从设备读取的速率每秒 I/O 次数默认列表为空 [] --device-write-bps 列表 限制向设备写入的速率每秒字节数默认列表为空 [] --device-write-iops 列表 限制向设备写入的速率每秒 I/O 次数默认列表为空 [] --disable-content-trust 跳过镜像验证默认值为真 --dns 列表 设置自定义 DNS 服务器 --dns-option 列表 设置 DNS 选项 --dns-search 列表 设置自定义 DNS 搜索域 --domainname 字符串 容器的 NIS 域名 --entrypoint 字符串 覆盖镜像的默认入口点ENTRYPOINT -e, --env 列表 设置环境变量 --env-file 列表 读取包含环境变量的文件 --expose 列表 暴露一个端口或端口范围 --gpus GPU 请求 要添加到容器的 GPU 设备all 表示传递所有 GPU --group-add 列表 添加要加入的其他组 --health-cmd 字符串 用于检查健康状况的命令 --health-interval 持续时间 运行检查的时间间隔毫秒 | 秒 | 分 | 时默认值为 0 秒 --health-retries 整数 判定为不健康所需的连续失败次数 --health-start-interval 持续时间 在启动期间运行检查的时间间隔毫秒 | 秒 | 分 | 时 默认值为 0 秒 --health-start-period 持续时间 容器初始化的启动周期在开始健康检查失败次数倒计时之前毫秒 | 秒 | 分 | 时 默认值为 0 秒 --health-timeout 持续时间 允许一次健康检查运行的最长时间毫秒 | 秒 | 分 | 时默认值为 0 秒 --help 打印使用说明 -h, --hostname 字符串 容器主机名 --init 在容器内运行一个初始化程序用于转发信号并回收进程 -i, --interactive 即使未附加也保持标准输入STDIN打开 --ip 字符串 IPv4 地址例如172.30.100.104 --ip6 字符串 IPv6 地址例如2001:db8::33 --ipc 字符串 要使用的进程间通信IPC模式 --isolation 字符串 容器隔离技术 --kernel-memory 字节数 内核内存限制 -l, --label 列表 在容器上设置元数据 --label-file 列表 读取包含标签的以行分隔的文件 --link 列表 添加到另一个容器的链接 --link-local-ip 列表 容器的 IPv4/IPv6 链路本地地址 --log-driver 字符串 容器的日志驱动程序 --log-opt 列表 日志驱动程序选项 --mac-address 字符串 容器的 MAC 地址例如92:d0:c6:0a:29:33 -m, --memory 字节数 内存限制 --memory-reservation 字节数 内存软限制 --memory-swap 字节数 交换空间限制等于内存加上交换空间-1 表示启用无限制交换 --memory-swappiness 整数 调整容器内存交换倾向取值范围 0 到 100默认值为 - 1 --mount 挂载 将文件系统挂载附加到容器 --name 字符串 为容器指定一个名称 --network 网络 将容器连接到网络 --network-alias 列表 为容器添加网络作用域的别名 --no-healthcheck 禁用任何容器指定的健康检查 --oom-kill-disable 禁用内存溢出OOM杀手 --oom-score-adj 整数 调整主机的内存溢出OOM偏好取值范围 - 1000 到 1000 --pid 字符串 要使用的进程 IDPID命名空间 --pids-limit 整数 调整容器的进程数量限制设为 - 1 表示无限制 --platform 字符串 如果服务器支持多平台则设置平台 --privileged 赋予此容器扩展权限 -p, --publish 列表 将容器的端口发布到主机 -P, --publish-all 将所有暴露的端口发布到随机端口 --pull 字符串 在运行前拉取镜像“总是”“缺失时”“从不”默认值为 “缺失时” -q, --quiet 抑制拉取输出 --read-only 将容器的根文件系统挂载为只读 --restart 字符串 当容器退出时应用的重启策略默认值为 “不重启” --rm 容器退出时自动删除容器 --runtime 字符串 此容器要使用的运行时 --security-opt 列表 安全选项 --shm-size 字节数 /dev/shm 的大小 --sig-proxy 将接收到的信号代理到进程默认值为真 --stop-signal 字符串 用于停止容器的信号 --stop-timeout 整数 停止容器的超时时间以秒为单位 --storage-opt 列表 容器的存储驱动程序选项 --sysctl 映射 Sysctl 选项默认映射为空 [] --tmpfs 列表 挂载临时文件系统tmpfs目录 -t, --tty 分配一个伪终端TTY --ulimit 资源限制 资源限制选项默认列表为空 [] -u, --user 字符串 用户名或用户 ID格式 名称 | 用户 ID[: 组名 | 组 ID] --userns 字符串 要使用的用户命名空间 --uts 字符串 要使用的主机名与域名系统UTS命名空间 -v, --volume 列表 绑定挂载一个卷 --volume-driver 字符串 容器可选的卷驱动程序 --volumes-from 列表 从指定的容器挂载卷 -w, --workdir 字符串 容器内的工作目录docker exec命令命令语法docker exec [OPTIONS] CONTAINER COMMAND [ARG...]命令字选项docker exec-d、 --detach分离模式在后台运行命令-e、 --env-list设置环境变量 --env文件列表读入环境变量的文件-i、 交互式保持STDIN打开即使未连接--privileged赋予命令扩展权限-t、 --tty分配一个伪tty-u、 用户名或UID格式name|uid:groupname|gid-w、 --workdir string容器内的工作目录docker logs命令命令语法docker logs [OPTIONS] cantinerName命令字选项docker logs查看容器日志--details显示提供给日志的额外详细信息-f、 --follow follow日志输出docker rename命令命令语法docker rename CONTAINER NEW_NAME命令字选项docker rename 旧名字 新名字给容器重新命名docker top命令命令语法:docker top CONTAINER [ps OPTIONS]命令字选项docker top 容器实例的ID查看容器内进程docker ps 命令命令语法docker ps [OPTIONS]命令字选项docker ps-a, --all显示所有容器默认仅显示运行中的容器-f, --filter filter 根据提供的条件过滤输出 --format string 使用自定义模板格式化输出 table: 以表格格式显示输出带列标题默认 table TEMPLATE: 使用给定的Go模板以表格格式显示输出 json: 以JSON格式显示 TEMPLATE: 使用给定的Go模板显示输出-n, --last int 显示最后创建的n个容器包括所有状态默认-1-l, --latest 显示最新创建的容器包括所有状态--no-trunc 不要截断输出-q, --quiet 仅显示容器ID-s, --size 显示总文件大小docker ps -a显示信息解析容器ID 镜像名称 容器启动时的运行命令 创建时间 容器当前的状态 容器运行时暴漏的端口 容器名称 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7df4661fb5d1 hello-world /hello 7 minutes ago Exited (0) 7 minutes ago happy_hermanndocker rm 命令命令语法docker rm [OPTIONS] CONTAINER [CONTAINER...]命令字选项docker rm-f, --force 强制删除运行中的容器使用SIGKILL-l, --link 删除指定的链接-v, --volumes 删除与容器关联的匿名卷别名docker container rm, docker container remove, docker rmdocker kill 命令命令语法docker kill [OPTIONS] CONTAINER [CONTAINER...]命令字选项docker kill-s, --signal string向容器发送的信号信号类型SIGTERM发送终止信号通常用于请求容器停止运行。SIGKILL发送终止信号强制终止容器通常用于紧急情况下快速停止容器。SIGINT发送中断信号通常与CtrlC类似用于触发默认行为。docker start命令命令语法docker start [OPTIONS] CONTAINER [CONTAINER...]命令字选项docker start启动容器-a, --attach附加STDOUT/STDERR并转发信号--checkpoint string从此检查点恢复--checkpoint-dir string使用自定义检查点存储目录--detach-keys string重写从容器中分离的关键序列-i, --interactive附加容器的STDINdocker restart命令命令语法docker restart [OPTIONS] CONTAINER [CONTAINER...]命令字选项docker restart重启容器-s, --signal string发送给容器的信号-t, --time int在终止容器之前等待的秒数docker stop 命令命令语法docker stop [OPTIONS] CONTAINER [CONTAINER...]命令字选项docker stop停止正在运行的容器-s, --signal string发送给容器的信号-t, --time int在终止容器之前等待的秒数docker inspect命令docker inspect命令用于查看 Docker 对象如容器、镜像、网络等的详细信息。可以使用 Go 模板语法来筛选和格式化输出内容。以下是一些常用的命令示例查看容器的 IP 地址docker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} container_name_or_id查看容器的 MAC 地址docker inspect -f {{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}} container_name_or_id查看容器的挂载点docker inspect -f {{range .Mounts}}{{.Source}} - {{.Destination}}{{end}} container_name_or_id查看容器的日志路径docker inspect -f {{.LogPath}} container_name_or_id查看容器的镜像名称docker inspect -f {{.Config.Image}} container_name_or_id查看容器的启动命令docker inspect -f {{.Config.Cmd}} container_name_or_id查看容器的端口映射docker inspect -f {{range $p, $conf : .NetworkSettings.Ports}}{{$p}} - {{(index $conf 0).HostPort}}{{end}} container_name_or_id查看容器的状态docker inspect -f {{.State.Status}} container_name_or_id查看容器的重启策略docker inspect -f {{.HostConfig.RestartPolicy.Name}} container_name_or_id查看容器的标签docker inspect -f {{range $k, $v : .Config.Labels}}{{$k}}{{$v}} {{end}} container_name_or_iddocker容器创建后的状态状态含义created创建但没有运行docker create imageNameup容器正在运行docker start | docker run | docker restartExited容器已退出 docker stoppaused容器已暂停0正常退出含义这是最理想的退出状态码表示容器中的应用程序或进程正常结束。通常是因为应用完成了它的任务例如一个脚本成功执行完毕或者一个服务器应用在收到正常的关闭信号后干净利落地退出。示例假设你有一个简单的容器里面运行一个打印 “Hello, World!” 然后退出的脚本。当脚本执行完打印操作后它会正常退出此时容器的退出状态码就是 0。对于一个 Web 服务器容器如果它正确地处理了关闭信号比如SIGTERM完成了所有正在处理的请求释放了资源然后退出也会返回 0。1通用错误含义这是一个比较笼统的错误状态码。它可能表示容器内部的应用程序发生了错误比如应用程序自身的代码出现了问题如语法错误、运行时错误例如除以零错误、空指针引用等或者应用程序无法正确启动。示例如果容器内运行的是一个 Python 脚本脚本中有一个语法错误如缺少冒号、缩进错误等当尝试运行这个脚本时容器就会因为脚本无法正确执行而以状态码 1 退出。若一个 Java 应用程序在启动过程中由于无法加载某个必需的类而抛出异常导致启动失败容器也可能以 1 退出。137被强制终止含义这个状态码通常表示容器被外部信号强制终止。最常见的情况是容器收到了SIGKILL信号。这种信号通常是在容器占用过多资源如内存或 CPU超出了系统设置的限制或者系统需要紧急回收资源时发出的。示例当容器的内存使用量不断增长超过了 Docker 为其设置的内存限制时Docker 守护进程可能会发送SIGKILL信号来终止容器此时容器就会以 137 状态码退出。如果在主机系统上使用docker kill命令不带-s选项默认发送SIGKILL来强制终止容器容器也会以 137 状态码退出。139段错误含义当容器内的应用程序发生段错误segmentation fault时容器会以 139 状态码退出。段错误通常是由于程序试图访问它不应该访问的内存区域比如访问一个已经释放的指针所指向的内存或者数组越界访问等。示例在 C 或 C 程序中如果有一个指针没有正确初始化就被用来访问内存或者一个数组访问超出了其定义的范围就很可能会导致段错误。当这样的程序在容器中运行时容器会以 139 状态码退出。这些是比较常见的 Docker 容器退出状态码但实际上还有其他状态码它们都可以帮助你诊断容器退出的原因。在处理容器退出问题时结合容器的日志和应用程序本身的特性来分析这些状态码是很重要的