当前位置: 首页 > article >正文

⚡️ Linux Docker 基本命令参数详解

🐳 Linux Docker 基本命令参数详解


📘 1. Docker 简介


Docker 是一个开源的容器化平台,它通过将应用及其依赖打包到一个轻量级、可移植的容器中,从而实现跨平台运行。Docker 采用 C/S 架构,服务端称为 Docker Daemon,客户端通过 CLI 工具与其交互。

核心概念包括:

  • 镜像(Image):只读模板,包含操作系统、应用程序及其依赖。
  • 容器(Container):镜像的运行实例,具备轻量、快速启动等优势。
  • 仓库(Registry):存放镜像的远程服务器,如 Docker Hub。
  • 网络(Network):用于容器之间或容器与主机之间的通信。

Docker 的安装和配置详见:
Linux 安装与配置 Docker


🛠️ 2. Docker 命令及参数


📦 2.1 容器命令


🔄 2.1.1 容器运行状态转换命令

用于管理容器的生命周期,包括创建、启动、暂停、恢复、停止、强制终止和删除等操作。


  • docker create
    创建一个新容器但不启动,适用于需要先设置参数再手动启动的场景。
    命令格式:

    sudo docker create [-it] \[--name 容器名] \[-p 容器端口:宿主机端口] \[-e 环境变量] \[-v 宿主机路径:容器路径] \<镜像名或镜像ID>
    

    说明:

    • [-it]: 这里的 -i 表示保持标准输入流开放; -t 表示分配一个伪终端,适用于交互式容器运行
    • [--name]: 容器名:如果你在使用 Docker 容器命令的时候不想输入一长串哈希值,那你最好在这里给容器起一个简单好记得名字
    • [-p 容器端口]:宿主机端口:对于需要开放端口的容器,将容器的端口映射到宿主机的端口,这样容器服务就可对外访问
    • [-e 环境变量]:设置容器的环境变量
    • [-v 宿主机路径]:容器路径:挂载宿主机目录到容器内部,方便保存和修改容器中的目录
    • <镜像名或镜像ID>:创建容器所使用的镜像的名字或ID,对应 docker images命令显示的 IMAGE ID 和 REPOSITORY

    提示:一般在专业的技术文档中[]内部的参数为可选参数,<>内部的参数为必选参数

    效果:

    在这里插入图片描述

    解释:这里通过交互终端的方式创建了一个 tomcat 容器,容器名为 tomcat_1,将宿主机的 5555 端口映射到容器的 8080 端口,添加设置时区为上海的环境变量,将容器内 /usr/local/tomcat/webapps 目录挂载到当前路劲下 webapps 文件夹中

    注意:一般为了让容器持续运行,都会加 -it 参数。因为有很多非服务性质的容器,打开后 docker 检测到容器内没有进程持续再跑就会自动把容器关闭。 -it 参数会再容器内挂一个持续在跑的交互式终端进程,这样容器内就至少有一个进程再跑,就不会被 docker 自动关闭了


  • docker run
    创建并立即运行一个容器,相当于 docker createdocker start 的组合。
    命令格式:

    sudo docker run [-d] \[-it] \[--name 容器名] \[-p 容器端口:主机端口] \[-e 环境变量] \[-v 主机路径:容器路径] \<镜像名或镜像ID>
    

    说明:

    • 大多数 docker create 的参数 docker run 都能用。还有一些设置执行方式的参数 docker create 不能用但是 docker run 能用,比如 -d 表示终端后台执行

    效果:

    在这里插入图片描述

    解释:这里用 docker run 命令以后台启动的方式启动了一个 tomcat 容器,容器名称为 tomcat_3,开启交互式终端进程,将宿主机的 5555 端口映射到容器的 8080 端口,添加设置时区为上海的环境变量,将容器内 /usr/local/tomcat/webapps 目录挂载到当前路劲下 webapps 文件夹中

    注意:docker run 不能启动已经由 docker create 创建的容器


  • docker start
    启动一个已经存在但处于停止状态的容器,不会创建新容器。
    命令格式:

      sudo docker start [-a] [-i] <容器名或ID>
    

    说明:

    • [-a]:将容器的标准输出(stdout)和标准错误输出(stderr)附加到当前终端。这意味着你能看到容器中程序的输出信息,适合调试或实时查看日志。
    • [-i]:保持标准输入(stdin)打开,使你可以向容器内发送输入,通常与 -a 配合使用以实现交互式操作(如进入容器后执行命令)
    • <容器名或ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里用 docker start 命令启动了 ubuntu_1 容器,可以看到启动后直接进入终端交互界面。需要注意 -ai 一般都是用在有交互界面的容器比如 Ubuntu 或 CentOS 上,像 tomcat 这种服务类型的容器即使加了 -ai 也无法在终端输入命令。

    解释: 这里用 docker start 命令启动了刚被创建的 tomcat_1 容器,容器状态从 Created 转变为 Up 。


  • docker pause
    暂停容器中所有进程,常用于临时挂起服务或调试容器状态。
    命令格式:

    sudo docker pause <容器名或ID>
    

    说明:

    • <容器名或ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里暂停了容器 ubuntu_1 ,容器状态从 Up 转变为 Up(Paused) 。


  • docker unpause
    恢复被暂停的容器进程,使其继续运行。
    命令格式:

    sudo docker unpause <容器名或ID>
    

    说明:

    • <容器名或ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里解除暂停了容器 ubuntu_1 ,容器状态从 Up(Paused) 转变为 Up 。


  • docker stop
    正常停止容器,先发送 SIGTERM 信号,若未在限定时间内关闭,则发送 SIGKILL。
    命令格式:

    sudo docker stop <容器名或ID>
    

    说明:

    • <容器名或ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里用 docker stop 停止了 ubuntu_1 容器,容器的状态从 Up 转变为 Exited 。


  • docker kill
    强制终止容器进程,直接发送 SIGKILL 信号,不等待容器自行关闭。
    命令格式:

    sudo docker kill <容器名或ID>
    

    说明:

    • <容器名或ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释: 这里强制关闭了容器 tomcat_1,容器状态从 Up 转变为 Exited 。


  • docker restart
    重启容器,相当于先执行 stopstart,适用于配置变更或服务重启。
    命令格式:

    sudo docker restart <容器名或ID>
    

    说明:

    • <容器名或ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里重新启动了 tomcat_1 容器,容器状态从26秒前的 Up 变成了4秒前的 Up,可见应该是重开过一回了。


  • docker rm
    删除已停止的容器,释放系统资源,需先确保容器不在运行中。
    命令格式:

    sudo docker rm <容器名或ID>
    

    说明:

    • <容器名或ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释: 这里用 dcoker rm 移除了 ubuntu_1 容器,可以看到移除后的容器已经无法用 docker ps 命令找到了


🧩 2.1.2 容器系统操控命令

本节介绍的命令用于对已启动的容器进行交互、查看或文件操作,是日常维护和调试容器中最常用的工具。


  • docker exec
    在运行中的容器中执行命令,常用于调试、进入容器内部操作或运行额外程序。
    命令格式:

    sudo docker exec [-it] <容器名或容器ID> [启动程序]
    

    说明:

    • [-i]:保持标准输入流(stdin)开启,即使未连接终端。
    • [-t]:分配一个伪终端(TTY),与 -i 一起使用以实现交互式操作。
    • <容器名或容器ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。
    • [启动程序]:容器内要执行的命令或程序,例如 /bin/bash、ls、top 等。

    效果:

    在这里插入图片描述

    解释:这里用 docker exec 进入了 tomcat 容器,可以看到进入容器后能够正常进行交互查看容器内容


  • docker attach
    附加到容器的主进程终端,显示容器当前的标准输出,可用于查看日志或与主进程交互。
    命令格式:

    sudo docker attach <容器名或容器ID>
    

    说明:

    • <容器名或容器ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    提示:其实 attach 也有很多可选参数,像--no-stdin之类的,但是开发或调试都基本上用不到。那这些参数设计出来是干什么的?我觉得是用来折磨客户的,为什么这么说,你看我写的第三节注意事项就知道了

    效果:

    在这里插入图片描述

    解释:这里用 dockere attach 进入了 ubuntu 容器,可以看到进入容器后能够正常进行交互查看容器内容

    在这里插入图片描述

    解释:这里用 docker attach 进入了 tomcat 容器,可以看到进入了以后不能输入任何信息只能看 tomcat 的日志,这是因为 tomcat 默认没有终端交互功能。要想看 tomcat 容器中的文件需要用 docker exec 命令


  • docker cp
    在宿主机与容器之间复制文件或目录,支持双向操作。
    命令格式:

    sudo docker cp <源路径> <目标路径>
    

    说明:

    • <源路径>:可以是宿主机路劲也可以是容器路径,如果是容器路径需要在路径前添加 <容器名>:
    • <目标路径>:可以是宿主机路劲也可以是容器路径,如果是容器路径需要在路径前添加 <容器名>:

    效果:

    在这里插入图片描述

    解释:这里用了 docker cp 命令将 tomcat 容器中的 README.md 文件复制出来,可以看到当前路径下多了 README.md 文件


🔍 2.1.3 容器信息检查命令

本小节介绍用于检查 Docker 容器状态、资源使用情况和日志输出的常用命令,适用于日常监控、调试和排查容器运行状态。


  • docker ps
    列出当前运行中的容器,显示容器的 ID、镜像、创建时间、状态、端口映射及名称等基础信息。
    命令格式:

    docker ps [-a] [-q]
    

    说明:

    • [-a]:列出所有容器,包括已停止的容器(不加这个参数 docker ps 仅显示运行中的容器)。
    • [-q]:仅输出容器 ID(常用于脚本中进一步处理)。

    效果:

    在这里插入图片描述

    解释:这里依次使用了 docker ps 以及带 -a 和 带-aq 的 docker ps ,可以看到 docker ps 显示的信息根据参数的不同而产生的变化。

    在这里插入图片描述

    这里使用 docker ps -aq 命令配合 docker stop 命令实现全部容器的停止,docker ps -aq 命令还可以和其他容器状态转换命令配合使用达到所有容器统一操作的效果。


  • docker top
    查看指定容器内运行的进程信息,类似于 Linux 系统中的 ps 命令,展示 PID、用户、启动时间、CPU 使用情况等。
    命令格式:

    docker top <容器名或容器ID>
    

    说明:

    • <容器名或容器ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里利用 docker top 命令查看了 tomcat 容器内再跑的进程状态


  • docker stats
    实时显示一个或多个容器的资源使用情况,包括 CPU 使用率、内存使用量/限制、网络 I/O、块设备 I/O 等。
    命令格式:

    docker stats [容器名或容器ID]
    

    说明:

    • [容器名或容器ID]:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。如果不指定容器则默认监控所有正在运行的容器

    效果:

    在这里插入图片描述

    解释:在执行了 docker status tomcat_1 命令以后就会进入这个状态界面,这里会详细的显示容器的 CPU 占用率和内存占用率,按下 Ctrl+C 可以退出这个界面


  • docker diff
    显示自容器创建以来文件系统的变化,列出被添加(A)、删除(D)或修改(C)的文件或目录。
    命令格式:

    docker diff <容器名或容器ID>
    

    说明:

    • <容器名或容器ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里 docker diff 显示内容中 C 表示修改过的目录,A 表示新增的目录


  • docker logs
    查看容器日志输出。
    命令格式:

    docker logs [-f] [--tail 行数] [--since 时间] [--timestamps] <容器名或容器ID>
    

    说明:

    • [-f]:实时输出日志内容(follow 模式,类似 tail -f)。
    • [--tail 行数]:仅显示指定数量的最新日志,例如 --tail 100。
    • [--since 时间]:显示自指定时间以来的日志,如 --since 10m(最近10分钟)。
    • [--timestamps]:在日志行前显示时间戳。
    • <容器名或容器ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里查看了10条 tomcat 的日志


  • docker port
    显示容器内部端口和宿主机端口之间的映射关系,适用于验证服务暴露状态和网络通信设置。
    命令格式:

    docker port <容器名或容器ID>
    

    说明:

    • <容器名或容器ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里用 docker port 查看了 tomcat 容器的端口映射。


  • docker inspect
    以 JSON 格式输出容器的详细配置信息,包括挂载卷、网络设置、环境变量、启动命令、IP 地址等。
    命令格式:

    docker inspect <容器名或容器ID>
    

    说明:

    • <容器名或容器ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:这里用 docker inspect 查看了 tomcat 容器的详细信息,这条命令的输出一般会很长,有时可能会冲掉好几个屏幕,建议配合 grep 命令过滤掉无用的信息。


🧱 2.2 镜像命令


🛠️ 2.2.1 镜像操作命令

本小节介绍 Docker 镜像的常用操作命令,涵盖从构建、打包、上传、下载到删除镜像的整个生命周期,适用于本地开发与远程部署场景。


  • docker commit
    基于正在运行的容器生成新的镜像,常用于容器内手动修改后的持久化保存。
    命令格式:

    docker commit [-a] \
    [-m] \
    [--pause] \
    <容器ID或容器名> \
    <目标镜像名:标签>
    

    说明:

    • [-a]:指定镜像的作者信息。
    • [-m]:添加一条提交说明,用于描述镜像的变更内容
    • [--pause]:在提交时是否暂停容器(默认值为 true,推荐保持),可防止写入过程中状态不一致
    • <容器名或容器ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。
    • <目标镜像名:标签>:给镜像起个名字,顺便带个版本号。

    效果:

    在这里插入图片描述

    解析:这里利用正在运行的 ubuntu 容器,生成了一个新的镜像 ubuntu1:1.0


  • docker pull
    从远程镜像仓库(如 Docker Hub)拉取指定镜像到本地。
    命令格式:

    docker pull <镜像名:标签>
    

    说明:

    • <镜像名:标签>:你们公司 docker 仓库里的镜像名,以及版本号。

    效果:

    在这里插入图片描述

    解释:这里我从公共仓库直接拉取了 nginx 镜像,如果是要到私有仓库拉取镜像需要先用 docker login 登录。


  • docker tag
    为已有镜像打上新的标签(tag),可用于本地重命名或准备推送到私有仓库。
    命令格式:

    docker tag <源镜像名:标签> <目标镜像名:标签>
    

    说明:

    • <源镜像名:标签>:你在进行修改操作的镜像名称以及对应版本号。
    • <源镜像名:标签>:你想创建的新的镜像的名称以及版本号。

    效果:

    在这里插入图片描述

    解释:这里可以通过 docker images 的信息看出,我将进行修改后的 tomcat 镜像打上标签,创建了一个新的镜像


  • docker push
    将本地镜像上传到远程镜像仓库。
    命令格式:

    docker push <镜像名:标签>
    

    说明:

    • <镜像名:标签>:你要上传到公司 docker 仓库的镜像名,以及版本号。

    效果:

    在这里插入图片描述

    解释:要推送镜像的前提是需要登录 docker,我这里登录了 docker Hub 将 huyulun/vim-net:1.0 这个镜像推送到远程仓库。

    在这里插入图片描述

    解释:推送成功后打开 docker hub 网站登录账号可以看到上传的镜像


  • docker build
    根据指定路径下的 Dockerfile 构建新的镜像。
    命令格式:

    docker build -t <镜像名:标签> <路径>
    

    说明:

    • <镜像名:标签>:你要上传到公司 docker 仓库的镜像名,以及版本号。
    • <路径>:构建 docker 镜像的上下文路径(通常是含有 Dockerfile 的目录)

    ** 效果:**

    在这里插入图片描述

    解释:这里我利用当前目录下的 Dockerfile 文件构建了镜像,可以看到构建成功后新的镜像会显示在 docker images 中


  • docker save
    将一个或多个镜像保存为本地 tar 包文件,方便分发或备份。
    命令格式:

    docker save -o <包名.tar> <镜像名:标签>
    

    说明:

    • <包名.tar>:给你的 tar 包起个名字。
    • <镜像名:标签>:你要打成 tar 包的镜像名,以及版本号。

    效果:

    在这里插入图片描述

    解释:docker save 执行成功后会在当前路径下生成一个镜像的 tar 包


  • docker load
    从本地 tar 包文件中导入镜像,常与 docker save 搭配使用。
    命令格式:

    docker load -i <镜像文件.tar>
    

    说明:

    • <镜像文件.tar>:你要导入的镜像文件 tar 包。

    效果:

    在这里插入图片描述

    解释:这里我导入了当前目录下的 at5.tar 镜像包,可以看到 docker images 中多了一个 at5:1.0 的镜像


  • docker rmi
    删除本地镜像(remove image),支持单个或多个镜像同时删除。
    命令格式:

    docker rmi <镜像名或ID> [...]
    

    说明:

    • <镜像名或ID> [...]:创建容器所使用的镜像的名字或ID,对应 docker images命令显示的 IMAGE ID 和 REPOSITORY 。可以一次性填写多个镜像名或ID。

    提示:一般在专业的技术文档中[…]表示前面跟的那个参数的数量可以是单数也可以是复数

    效果:

    在这里插入图片描述

    解释:对比前后的 docker images,可以看到我利用 docker rmi 删除了 at5:1.0 和 tomcat:1.1 两个镜像


🔍 2.2.2 镜像信息检查命令

镜像信息检查命令用于查看镜像的基本信息、详细配置以及远程仓库中可用的镜像资源,有助于开发者进行筛选、管理和调试。


  • docker search
    用于在远程镜像仓库(如 Docker Hub)中搜索公开镜像。支持模糊匹配关键字,并返回镜像名称、描述、星级(Star 数)等信息,方便用户选择合适的基础镜像。
    命令格式:

    docker search <关键字>
    

    说明:

    • <关键字>:你要搜索的镜像的名字。

    示例:
    在这里插入图片描述

    解释:这里列出来的就是你能 docker pull 到的公共镜像。该功能需要访问外网,并且只能搜索Docker Hub上的公共仓库。如果不擅长配置 Docker 服务的网络代理,可以直接上 Docker Hub 官网 搜索


  • docker images / docker image ls
    用于列出本地所有已下载的镜像,包括镜像仓库名(REPOSITORY)、标签(TAG)、镜像 ID、创建时间和占用空间等。
    命令格式:

    docker images
    docker image ls
    

    示例:

    在这里插入图片描述

    解释:两个命令唯一的区别就是docker images可以少打一个空格和一个 l 。


  • docker inspect
    显示镜像的底层详细信息,返回 JSON 格式的数据,包括镜像的创建时间、分层信息、配置参数、标签、构建指令等。该命令非常适用于调试镜像构建问题或验证构建元数据。
    命令格式:

    docker inspect <镜像名或镜像ID>
    

    说明:

    • <镜像名或镜像ID>:你要查看的目标镜像的名字或ID

    示例:

    解释:这条命令会显示一串很长的 JSON 数组,建议配合 grep 搜索命令使用,例如 sudo docker inspect tomcat | grep -A 10 "Layer"


🏢 2.3 Docker 网络命令


🕸️ 2.3.1 Docker 组网命令

Docker 支持自定义网络管理功能,允许用户创建、连接、断开和删除网络资源,从而灵活地配置容器之间的通信方式。


  • docker network create
    用于创建一个自定义的 Docker 网络,支持指定网络驱动类型、子网范围、网关地址等参数。

    命令格式:

    docker network create \--driver <网络驱动> \--subnet <子网地址/掩码> \--gateway <网关地址> \<网络名称>
    

    说明:

    • –driver <网络驱动>:这里的网络驱动需要在 bridge, host, none 之中三选一。
    • –subnet <子网地址/掩码>:根据你的组网策略选择子网地址和掩码,不懂的话就写 192.168.0.0/16
    • –gageway <网关地址>: 根据你的地址填写网关地址,不懂的话就写 192.168.0.1
    • <网络名称>:给你自定义创建的网络起个帅气的名字。

    效果:

    在这里插入图片描述

    解释:这里创建完以后显示的一长串是镜像的完整 ID,放心,不是乱码,没有报错。


  • docker network rm
    用于删除一个或多个未被使用的 Docker 网络。如果某个网络中仍有容器在运行,将无法被删除,必须先断开容器连接或停止容器。

    命令格式:

    docker network rm <网络名或ID>
    

    说明:

    • <网络名或ID>:这里的网络名指的就是 docker network ls 中的 NAME , ID 指的就是 NETWORK ID。

    效果:

    在这里插入图片描述


  • docker network connect
    将一个运行中的容器连接到指定的 Docker 网络,使其具备与该网络中其他容器通信的能力。一个容器可以同时连接到多个网络。

    命令格式:

    docker network connect <网络名或ID> <容器名或ID>
    

    说明:

    • <网络名或ID>:这里的网络名指的就是 docker network ls 中的 NAME , ID 指的就是 NETWORK ID。
    • <容器名或ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:命令执行完成后不会显示任何信息,但是可以通过 docker inspect 来确认容器是否已经成功加入网络


  • docker network disconnect
    将容器从指定的 Docker 网络中断开。断开后该容器将无法再通过该网络与其他容器通信。

    命令格式:

    docker network disconnect <网络名或ID> <容器名或ID>
    

    说明:

    • <网络名或ID>:这里的网络名指的就是 docker network ls 中的 NAME , ID 指的就是 NETWORK ID。
    • <容器名或ID>:这里的容器名指的就是 docker ps 中的 NAMES , ID 指的就是CONTAINER ID。

    效果:

    在这里插入图片描述

    解释:命令执行完成后不会显示任何信息,但是可以通过 docker inspect 来确认容器是否已经成功从网络中移除


🔍 2.3.2 Docker 网络信息检查命令

Docker 网络信息检查命令主要用于查看当前系统中存在的网络资源及其详细配置,帮助用户理解容器之间如何连接、隔离以及与外部通信的方式。


  • docker network ls
    查看网络列表。
    命令格式:

    docker network ls
    

    效果:

    在这里插入图片描述

    解释:这里显示的 NAME 为 bridge, host, none 的网络为 Docker 自动创建的网络。bridge 网络中的容器会被分配虚拟 IP ; host 网络中的容器会共享宿主机的 IP ; none 网络中的容器没有 IP。创建容器的时候不跟 --net 参数的话默认会被分配到 bridge 网络中。


  • docker network inspect
    查看网络配置详情。

    命令格式:

    docker inspect <网络名或ID>
    

    说明:

    • <网络名或ID>:这里的网络名指的就是 docker network ls 中的 NAME , ID 指的就是 NETWORK ID

    效果:

    在这里插入图片描述


🧰 2.4 Docker 仓库命令

在实际开发或部署过程中,企业通常会搭建私有镜像仓库(如 Harbor、JFrog Artifactory),用于集中管理项目镜像、控制权限、提升部署效率。而默认情况下,Docker 使用的是官方镜像仓库 Docker Hub。以下是与仓库认证相关的基本命令:


  • docker login
    用于登录镜像仓库,以便后续拉取(pull)或推送(push)镜像。登录过程会将凭据保存在本地配置文件中(如 ~/.docker/config.json),用于身份验证。

    命令格式:

    docker login -u <用户名> <仓库地址>
    

    说明:

    • -u <用户名> :公司给你分配的 Docker 仓库账号,或者是你在 Docker Hub 上注册的账号。
    • <仓库地址>:你们公司的仓库地址。如果是登录 Docker Hub,仓库地址可省略。

    效果:

    在这里插入图片描述

    解释:命令执行后系统会提示输入密码,输入完成后按回车即可登录。这里我用自己的账号登录 Docker Hub。登录成功后,即可在私有仓库中执行镜像上传、下载等操作。

    提示:其实 docker login -u <用户名> -p <密码> 可以一步登录,但是这样我的密码就被你知道了)


  • docker logout
    用于登出当前登录的镜像仓库账户,清除本地保存的认证信息。

    命令格式:

    docker logout [仓库地址]
    

    说明:

    • [仓库地址]:你们公司的仓库地址。如果未指定地址,则默认登出 Docker Hub。

    效果:

    在这里插入图片描述


⚠️ 3. 注意事项


🍁 docker build 构建镜像失败 exit code:100

再使用 Dockerfile 构建镜像的时候出现以下情况

在这里插入图片描述

这是因为 Dockerfile 中有下载安装软件的指令,而 Ubuntu:latest 镜像默认软件源 http://ports.ubuntu.com/ubuntu-ports 是失效的,需要切换到国内有效的软件源,才能进行软件仓库的更新以及软件的下载和安装。但是我们在构建镜像的时候又无法进入容器修改配置文件,所以只能采取通过 sed 命令在系统安装软件之前强制修改配置文件内容的方法了:

RUN sed -i -e 's|http://ports.ubuntu.com/ubuntu-ports|http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports|g' /etc/apt/sources.list.d/ubuntu.sources && \apt-get update && \apt-get install -y vim

💦 docker 容器起不来

如果你用 docker start 启动容器时遇到以下情况

在这里插入图片描述
或者用 docker run 启动容器时遇到以下情况

在这里插入图片描述
那么你需要检查你的容器内部有没有持续运行的进程。如果你的容器不是服务类型的(比如 tomcat 或 nginx ),而且你在启动的时候没有添加 -it 参数,那么容器启动后会因为没有持续运行的进程而被 docker 关闭。所以一般不管时什么性质的容器,只要他不报错,我都会在启动容器的时候加上 -it 参数。


💔Tomcat 容器 docker attach 卡死

如果你通过 docker attach 链接 Tomcat 容器时遇到以下情况

在这里插入图片描述
光标就这样卡在那儿不动了。这个时正常情况,因为 tomcat 是服务性质的容器,即使你添加了 -it 参数也无法在他的主进程中和他进行交互,这时候正确的做法应该是按下 Ctrl+C 然后使用带 it 参数的 docker run 启动 tomcat ,这样才能进入到 tomcat 容器中。

但如果你闲的没事使用了 docker attach 命令的 --no-stdin 参数去链接 tomcat 容器

在这里插入图片描述

那么恭喜你,发现了一个能够卡死终端的新方法。在这种情况下,你无论输入任何指令终端都不会有相应,包括 Ctrl+C 和 Ctrl+P+Q 。原因是 docker attach 的 --no-stdin 参数会让容器无视一切标准输入中的指令,这相当于给本来就不怎么聪明的 tomcat 容器又灌了一瓶毒奶粉,这是真的没救了,只能重开终端了。

至于为什么会有这种参数,我个人猜测是某些开发者有特殊的需求,希望客户在使用容器的时候,出于安全的角度(我就是想折磨客户😈),防止客户误输入指令导致容器状态异常,才设计出来的。

相关文章:

⚡️ Linux Docker 基本命令参数详解

&#x1f433; Linux Docker 基本命令参数详解 &#x1f4d8; 1. Docker 简介 Docker 是一个开源的容器化平台&#xff0c;它通过将应用及其依赖打包到一个轻量级、可移植的容器中&#xff0c;从而实现跨平台运行。Docker 采用 C/S 架构&#xff0c;服务端称为 Docker Daemon&a…...

做题笔记(ctfshow)

一。ctfshow web13 文件扫描 存在upload.php.bak <?php header("content-type:text/html;charsetutf-8");$filename $_FILES[file][name];$temp_name $_FILES[file][tmp_name];$size $_FILES[file][size];$error $_FILES[file][error];$arr pathinfo($fi…...

Linux 用户层 和 内核层锁的实现

目录 一、系统调用futex介绍1. 核心机制2. 常见操作3. 工作流程示例&#xff08;互斥锁&#xff09;4. 优势5. 注意事项6. 典型应用 二、Linux中用户态的锁和内核的锁不是同一个实现吗&#xff1f;2.1 本质区别2.2 用户态锁如何工作&#xff08;以 pthread_mutex 为例&#xff…...

Android第十五次面试总结(第三方组件和adb命令)

Android 第三方组件转为系统组件核心流程 这通常是在进行 Android 系统定制&#xff08;如 ROM 开发、固件制作&#xff09;时完成&#xff0c;目的是让第三方应用拥有更高的权限和系统身份。主要过程如下&#xff1a; ​核心准备&#xff1a;签名&#xff01;赋予系统身份​ …...

Agent短期记忆的几种持久化存储方式

今天给大家讲一下关于Agent长期对话的几种持久化存储方式&#xff0c;之前的文章给大家说过短期记忆和长期记忆&#xff0c;短期记忆基于InMemorySaver做checkpointer&#xff08;检查点&#xff09;&#xff0c;短期记忆 &#xff08;线程级持久性&#xff09; 使代理能够跟踪…...

Git 常见操作

目录 1.git stash 2.合并多个commit 3. git commit -amend (后悔药) 4.版本回退 5.merge和rebase 6.cherry pick 7.分支 8.alias 1.git stash git-stash操作_git stash 怎么增加更改内容-CSDN博客 2.合并多个commit 通过git bash工具交互式操作。 1.查询commit的c…...

从 ClickHouse、Druid、Kylin 到 Doris:网易云音乐 PB 级实时分析平台降本增效

网易云音乐基于 Apache Doris 替换了早期架构中 Kylin、Druid、Clickhouse、Elasticsearch、HBase 等引擎&#xff0c;统一了实时分析架构&#xff0c;并广泛应用于广告实时数仓、日志平台和会员报表分析等典型场景中&#xff0c;带来导入性能提升 3&#xff5e;30 倍&#xff…...

隐函数 因变量确定标准

涉及多元隐函数求导法的逻辑本质&#xff1a;当我们对隐函数关系 F ( x , y , z ) 0 F(x, y, z) 0 F(x,y,z)0 使用偏导法求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​时&#xff0c;为什么「偏导」能确定谁是因变量&#xff1f;为什么只有当对 z z z 的偏导 F z…...

Facebook接入说明

Facebook 原生 Messenger 聊天消息接入到一洽对话中 1、创建 Facebook 主页 进入 https://www.facebook.com/pages/create 页面根据提示创建主页&#xff08;如果已经有待用主页&#xff0c;可跳过&#xff09; 2、授权对话权限 1、向您的一洽负责人获取 Facebook 授权链接 2、…...

Grafana 地图本土化方案:使用高德地图API平替GeoMap地图指南

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] &#x1f4e2; 大家好&#xff0c;我是 WeiyiGeek&#xff0c;一名深耕安全运维开发&#xff08;SecOpsDev&#xff09;领域的技术从业者&#xff0c;致力于探索DevOps与安全的融合&#xff08;De…...

Python爬虫实战:研究demiurge框架相关技术

1. 引言 在当今数字化时代,互联网上蕴含着海量的有价值信息。爬虫技术作为获取这些信息的重要手段,被广泛应用于学术研究、商业分析、舆情监测等多个领域。然而,构建一个高效、稳定且可维护的爬虫系统面临诸多挑战,如网页结构复杂多变、反爬机制日益严格、数据处理流程繁琐…...

3 个优质的终端 GitHub 开源工具

1、Oh My Zsh Oh My Zsh 是一个帮助你管理和美化 zsh 终端的开源工具。它让你的终端更炫酷、更高效。安装后&#xff0c;你可以快速使用各种插件和主题&#xff0c;比如常见的 git 命令简化、支持多种编程语言工具等&#xff0c;每次打开终端都会有惊喜。无论你是开发者还是普…...

F(x, y, z) = 0 隐函数微分 确定自变量

多元隐函数偏导的通用公式&#xff1a; 设一个隐函数由三元函数定义&#xff1a; F ( x , y , z ) 0 F(x, y, z) 0 F(x,y,z)0 且假设 z z ( x , y ) z z(x, y) zz(x,y)&#xff0c;即 z z z 是 x , y x, y x,y 的函数&#xff0c;满足这个等式恒成立。则有以下公式&am…...

亚马逊AWS云服务器高效使用指南:最大限度降低成本的实战策略

对于初次接触云计算的企业或个人开发者而言&#xff0c;亚马逊云服务器&#xff08;Amazon EC2&#xff09;的配置与成本控制往往面临双重挑战&#xff1a;既要理解数百种实例规格的技术参数&#xff0c;又要避免因配置不当导致的资源浪费。本文将深入剖析AWS EC2的核心使用场景…...

Android设备推送traceroute命令进行网络诊断

文章目录 工作原理下载traceroute for android推送到安卓设备执行traceroutetraceroute www.baidu.com Traceroute&#xff08;追踪路由&#xff09; 是一个用于网络诊断的工具&#xff0c;主要用于追踪数据包从源主机到目标主机所经过的路由路径&#xff0c;以及每一跳&#x…...

github开源协议选择

文章目录 怎么选协议宽松型协议 Permissive Licenses传染型协议 怎么选协议 希望代码被广泛使用&#xff0c;允许闭源 MIT、Apache 2.0、BSD需要专利保护 Apache 2.0强制开源衍生作品 GPL、AGPL开发库&#xff0c;允许闭源调用 LGPL云服务项目&#xff0c;防止白嫖 AGPL企业级…...

详解Jenkins Pipeline 中git 命令的使用方法

在 Jenkins Pipeline 中&#xff0c;git 命令是用于从版本控制系统&#xff08;如 Git&#xff09;拉取代码的核心步骤。其用法灵活&#xff0c;支持多种配置参数&#xff0c;但需要遵循 Jenkins 流水线语法规范。 一、基础语法 1. 声明式流水线&#xff08;Declarative Pipe…...

【Mini-F5265-OB开发板试用测评】显示RTC日历时钟

一、前言 本章节承接上期的【Mini-F5265-OB开发板试用测评】硬件SPI方式驱动LCD屏帖子上。灵动微官方提供的“LibSamples_MM32F5260_V0.10.2”SDK中包含一个RTC日历的参考例程&#xff0c;因此将该功能移植到上期工程中&#xff0c;即可达成在LCD屏上显示RTC日历时钟。 官方提…...

【生活】程序员防猝si指南

note 一、定期体检二、均衡饮食&#xff0c;多食用对心脏有保护作用的食物三、每周运动四、减压五、保证睡眠六、戒烟限酒7、控制血压8、警惕流感攻击心脏9、关注牙齿健康10、不要抵触吃药 文章目录 note一、定期体检二、均衡饮食&#xff0c;多食用对心脏有保护作用的食物三、…...

CommandLineRunner详细教程

文章目录 1. CommandLineRunner基础概念和背景1.1 什么是CommandLineRunner&#xff1f;1.1.1 核心概念1.1.2 接口定义 1.2 为什么需要CommandLineRunner&#xff1f;1.3 CommandLineRunner的特点1.3.1 执行时机1.3.2 与ApplicationRunner的区别 2. 环境搭建和项目结构2.1 Mave…...

Github 2025-06-05 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2025-06-05统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10TypeScript项目1Go编程语言:构建简单、可靠和高效的软件 创建周期:3474 天开发语言:Go协议类型:BSD 3-Clause “New” or “Revise…...

C++进阶--C++11--智能指针(重点)

文章目录 C进阶--智能指针&#xff08;重点&#xff09;智能指针使用的场景RAII和智能指针的设计思路C标准库智能指针的使用定制删除器智能指针的原理shared_ptr和weak_ptr循环引用&#xff08;容易考&#xff09;weak_ptr 其他知识扩展(类型转换)总结个人学习心得结语 很高兴和…...

CSP-38th

目录 1.正态分布 2.走马 3.信息传输 4.字符串可能性个数 5.最多访问节点个数 1.正态分布 本来是很简单的一道模拟题&#xff0c;根据 (n-u) /a 的整数位、十分位确定是在第几行&#xff0c;根据百分位确定是在第几列&#xff0c;但是我直接将 (n-u)/a 乘以100后进行 // 和…...

企业私有化部署DeepSeek实战指南:从硬件选型到安全运维——基于国产大模型的安全可控落地实践

一、部署前的战略评估与规划 私有化部署不仅是技术工程&#xff0c;更是企业数据战略的核心环节。需重点评估三方面&#xff1a; 1、业务场景适配性​ 适用场景&#xff1a;金融风控&#xff08;需实时数据处理&#xff09;、医疗诊断&#xff08;敏感病历保护&#xff09;、政…...

【西门子杯工业嵌入式-5-串口实现数据收发】

西门子杯工业嵌入式-5-串口实现数据收发 一、通信基础1.1 什么是通信1.2 嵌入式系统中的通信 二、串行通信原理2.1 串行通信简介2.2 通信参数约定 三、GD32F470 串口资源与性能3.1 串口硬件资源 四、串口通信的实现4.1 串口初始化流程4.2 串口发送函数编写4.3 使用 printf 实现…...

F(x,y)= 0 隐函数 微分法

&#x1f7e6; 一、隐函数微分法简介 ▶ 什么是隐函数&#xff1f; 显函数&#xff1a;形如 y f ( x ) y f(x) yf(x)&#xff0c;变量之间是显式关系。 隐函数&#xff1a;形如 F ( x , y ) 0 F(x, y) 0 F(x,y)0&#xff0c;变量间不是直接表达的&#xff0c;需要通过…...

深度学习登上Nature子刊!特征选择创新思路

2025深度学习发论文&模型涨点之——特征选择 特征选择作为机器学习与数据挖掘领域的核心预处理步骤&#xff0c;其重要性在当今高维数据时代日益凸显。 通过识别最具判别性的特征子集&#xff0c;特征选择算法能够有效缓解"维度灾难"、提升模型泛化能力&#x…...

面壁智能推出 MiniCPM 4.0 端侧大模型,引领端侧智能新变革

在 2025 智源大会期间&#xff0c;面壁智能重磅发布了开源模型 MiniCPM 4.0 的两个新版本&#xff08;0.5B、8B&#xff09;&#xff0c;代号「前进四」。此次发布在人工智能领域引发了广泛关注&#xff0c;标志着端侧大模型技术取得了重大突破。 卓越性能&#xff0c;树立行业…...

NLP学习路线图(三十二): 模型压缩与优化

一、 核心压缩与优化技术详解 1. 知识蒸馏:智慧的传承(Knowledge Distillation, KD) 核心思想:“师授徒业”。训练一个庞大、高性能但笨重的“教师模型”(Teacher Model),让其指导训练一个轻量级的“学生模型”(Student Model)。学生模型学习模仿教师模型的输出行为(…...

javaSE复习(7)

1.KMP算法 使用KMP算法在主串 "abaabaabcabaabc" 中搜索模式串 "abaabc"&#xff0c;到匹配成功时为止&#xff0c;请问在匹配过程中进行的单个字符间的比较次数是&#xff08;&#xff09;。 10次 用于互斥时 初值为1 在一个并发编程环境中&#xff0c…...