拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Docker环境安装完全指南:从核心概念到多平台实操与排障

Docker环境安装完全指南:从核心概念到多平台实操与排障

先回答一个几乎天天被问到的问题:Docker到底是个什么东西,值得花一个系列专门来讲?如果你已经经历了手动装环境、配依赖、跑服务,然后换了一台机器从头再来一遍的痛,那你大概能理解Docker解决的就是这种“环境地狱”的问题。它能让你像打包快递一样,把程序和它运行所需的一切依赖打成一个镜像,丢到任何装好了Docker的机器上,一条命令就能跑起来,几乎不受底层操作系统差异的影响。

这第3篇会聚焦在“环境安装”。我默认你已经看过前面关于核心概念和应用场景的内容,即使没看也没关系,这篇会先快速梳理一下必要的概念铺垫,然后分平台把Docker装起来。无论你是Windows用户、macOS用户,还是手头有一台Linux服务器,都能找到对应的完整步骤。这篇不会只告诉你“装好就完事”,我会把安装前要检查的东西、安装中容易踩的坑、装完必须做的验证,以及我实测下来最稳妥的配置方式全部摊开讲,适合刚接触Docker的初学者,也适合准备在服务器上部署生产环境的同学。

1. 安装Docker前必须先搞懂的核心概念

1.1 Docker与传统虚拟机的本质区别

很多人会把Docker和虚拟机混为一谈,这个误会挺深的。传统虚拟机(比如VirtualBox、VMware)是在宿主机上模拟出一整套完整的硬件环境,然后在虚拟的硬件里装一个完整的操作系统。这就好比你想在房间里多放一个柜子,干脆重新盖了一间带地基、墙体和房顶的独立小屋,成本自然高得离谱。每个虚拟机都要占用好几个G的磁盘空间,启动也要几十秒甚至更久。

Docker走的是另一条路。它不虚拟硬件,直接复用宿主机的内核,只是在用户空间里通过命名空间做隔离、通过联合文件系统做分层存储。用仓库类比,Docker就像在一个大厂房里用隔板划分出多个独立工位,每个工位有自己专属的工具和原料,但大家共用同一个地基和外墙,不需要每换一个工位就重盖一栋房子。所以Docker容器通常只有几十到几百MB,秒级就能启动,一台机器可以同时跑几十上百个容器。

这也解释了为什么Docker只适合跑Linux系的应用。Windows容器和macOS上跑Docker,本质都是借助轻量级虚拟机先在系统里跑一个精简的Linux内核,再基于它运行容器。所以你在Windows上用Docker Desktop,其实是从内部调起了WSL2或者Hyper-V,不是Docker本身原生支持了Windows。

1.2 镜像、容器、仓库三者之间的关系

  • 镜像(Image):一个只读的、打包好的模板,包含程序代码、运行时环境、依赖库、配置文件等所有东西。它是容器的“图纸”。
  • 容器(Container):镜像运行起来之后的具体实例,是真正在跑的进程。同一个镜像可以启动多个互不干扰的容器。
  • 仓库(Repository):集中存放镜像的地方,你需要从仓库把镜像拉到本地才能运行。公共的Docker Hub上面有海量现成镜像,也有官方维护的各种基础镜像。

打个比方:镜像是一张系统安装盘的ISO文件,容器就是装好之后的系统。ISO可以复制无数份,拷到任何电脑上装出来的系统几乎一模一样,容器和镜像的关系高度类似。仓库就是软件源,你得先知道去哪下载镜像。

理解这三者的关系,你后面学Docker Compose、镜像构建、多容器编排都会顺畅很多。因为它们本质上都是在围绕“镜像怎么构建、容器怎么编排、仓库怎么管理”这三个核心在打转。

2. 环境安装前的准备工作与版本选型

2.1 选Docker Desktop还是原生Docker CLI?

很多新手在这里犯了选择困难症。简单说,家庭电脑和工作电脑、测试环境优先用Docker Desktop:图形界面很直观,可以一目了然地看到当前有哪些容器在跑、占用多少资源、哪个端口映射到了哪里,也可以在设置里一键调整资源配额。

服务器和纯命令行环境,则完全不需要图形界面,安装Docker Engine(也就是原生Docker CLI系列组件)就够了。它不包含任何GUI,只提供服务端和命令行工具,占用资源更少,也更利于自动化脚本管理。

如果你是在Linux的桌面发行版上做开发,其实也可以直接用原生Docker Engine,因为它不需要底层的虚拟机中转,直接在宿主机内核上跑,性能损耗最小,这本身就是Linux环境最舒服的地方。

2.2 环境预检清单:装之前花5分钟省心一个月

无论哪个平台,我都会建议先做一遍预检,省得装到一半卡住。

检查项说明判断标准
CPU虚拟化Windows/macOS虚拟机类方案需要CPU虚拟化技术支持BIOS里开启Intel VT-x或者AMD-V
是否启用WSL2Windows用户强烈建议先装WSL2再装Docker Desktopwsl --status能正常显示版本信息
操作系统版本太老的内核可能不兼容新版Docker引擎老版本系统建议先升级或换用兼容版本
磁盘空间镜像和容器会占用大量空间建议预留至少20GB以上空闲空间
内存Docker Desktop默认会占用较多内存至少8GB内存,16GB体验更好
是否已有旧版Docker冲突会导致装不上或启动失败先卸载旧版本再重新安装

我实测过,WSL2在Windows 10 2004及以上版本都有良好兼容,如果你是Windows 11那就更顺畅了。如果你的电脑BIOS里没有开启虚拟化,那Docker Desktop启动时会直接报错,本文后面会专门讲这个问题的排查方法。

提示:建议先把系统更新到最新补丁再开始安装,很多莫名其妙的问题其实都是系统版本太旧导致的。

3. 离线安装也可以:无网环境的镜像分发与部署

3.1 无网环境的镜像导出、加载与运行

服务器在隔离网络环境中跑Docker并不少见。初始安装Docker引擎本身是一个步骤,之后所有镜像都靠离线导入。很多人第一次操作会问:我这边不能上外网,怎么拉镜像?

  • 在有网络的一台机器上,先docker pull把镜像拉到本地。
  • 使用docker save -o 文件名.tar 镜像名:版本导出成单个压缩归档文件。
  • 把tar文件拷贝到无网机器上。
  • 在无网机器上执行docker load -i 文件名.tar,镜像就会自动加载到本地镜像列表里。
  • docker images确认无误,然后正常docker run。

保存的tar文件是很多层镜像合并后的一个归档文件。上传下载时把它当普通大文件管理就行,可以选网络空闲时段传。建议导出时给镜像打上标签,比如myapp:prod-240101,这样离线机器里第一眼就能知道这是哪个版本,避免“我导的镜像到底是哪个版本”这种污染。

3.2 无网环境安装Docker引擎

如果无网机器上连Docker引擎都没有,需要先在有网环境的同版本操作系统中下载安装包。这个方式叫离线安装,整体思路是先下载所有依赖的deb/rpm包,然后拷到目标机器上执行本地安装。

  • 在有网机器上准备一个和离线服务器完全一致的操作系统版本。
  • 下载目标机器所需的Docker安装包及全部依赖包,放到同一个文件夹。
  • 在无网机器上执行sudo dpkg -i *.deb(Debian系)或sudo rpm -ivh *.rpm(RHEL系)。
  • 执行sudo systemctl enable --now docker启动并设置开机自启。

这种方式需要留意系统底包版本差异。同一个Ubuntu版本号下,内核小版本可能不同,依赖库版本也可能有差别,拿不准时先用uname -r核对内核小版本,确定了再操作。如果不幸装好后报错缺so文件,按报错提示去补对应的依赖包并重新执行本地安装命令即可。

4. Docker引擎在Linux上的完整安装与配置

4.1 Ubuntu/Debian系安装步骤

我日常用得最多的还是Ubuntu系列,官方文档已经把安装路径写得很清晰,只要不擅自跳过步骤,基本不会出问题。先卸载可能存在的旧版本软件包:

sudo apt-get remove docker docker-engine docker.io containerd runc

然后安装依赖,让apt能通过HTTPS访问软件源:

sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release

添加Docker官方GPG密钥(注意是archive的apt源):

sudo apt-get install curl curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

再添加稳定版软件源:

echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

最后安装核心组件:

sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

装完一定要执行下面这几句,防止服务没起来:

sudo systemctl enable docker sudo systemctl start docker sudo systemctl status docker

我印象很深的一次装机就是把docker-ce装好了,结果忘记enable,第二天服务器重启后Docker服务没自动拉起来,镜像和容器都在,但都处于停滞状态。所以这个开机自启的动作,放在服务器环境里非常重要。

4.2 CentOS/RHEL系安装步骤

CentOS 7虽然老,但存量用户不少。安装依赖:

sudo yum install -y yum-utils

配置仓库,同样走加速源:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

然后安装:

sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动并设置开机自启:

sudo systemctl start docker sudo systemctl enable docker

CentOS上我额外提醒一点:装了某些安全加固软件后,selinux或者firewalld可能拦截Docker网络,导致容器间互相ping不通。遇到这类情况先检查selinux状态,可以先临时用setenforce 0测试排除,确认是selinux的问题后再按实际策略作调整。

4.3 麒麟等国产系统安装经验

国产系统如麒麟V10离线安装Docker的场景我碰到过不少,本质上是基于RHEL系做了定制。有网环境的机器装好后,按前面讲的方式导出安装包并在目标机器上执行本地安装即可。如果没有现成的deb/rpm包,可以在同源系统上使用yum做一次yum install --downloadonly把依赖全部拉下来。

这类型的系统有时候默认没有额外装好docker服务的管理变更方式,装好之后我一般手动确认:

sudo systemctl daemon-reload sudo systemctl enable docker sudo systemctl start docker

系统底子干净的话,Docker引擎完全可以正常跑起来,不影响后续各种容器的部署和调试。

5. Docker Desktop在Windows上的安装实操

5.1 Windows端安装前的WSL2准备

Windows跑Docker Desktop,体验和Linux原生几乎一样好,但前提是WSL2要准备到位。我没用Hyper-V的方案,因为WSL2的内存占用更灵活,启动也更快,对开发者更友好。

先检查当前是否已经启用WSL:

wsl --status

如果显示为旧版WSL1,需要升级到WSL2:

wsl --update wsl --set-default-version 2

打开管理员权限的PowerShell,手动启用Windows功能:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

之后重启电脑。再把默认WSL版本设置为2:

wsl --set-default-version 2

然后去Microsoft Store安装一个发行版,Ubuntu 22.04就够用了。装好之后打开一次完成初始化,设置好用户名密码。如果你只想用Docker命令行,这个发行版可以闲置着不管,因为Docker Desktop会自动使用WSL2的后端。

这个步骤里最容易出问题的是重启没有生效,Windows功能是即时的,但内核更新可能需要重启。没重启就开始装Docker Desktop,大概率会报“WSL kernel version too low”,所以别偷懒跳过重启。

5.2 下载、安装与首次启动Docker Desktop

从官方网站下载Docker Desktop安装包,现在官方已经提供直接下载链接(具体版本号会有更新),下载完成后双击运行。安装过程中有几个选项:

  • 是否使用WSL2还是Hyper-V:强烈建议选择WSL2。
  • 是否添加桌面快捷方式:按自己喜好。
  • 是否允许普通用户使用:开发电脑上默认勾选就行。

安装完成后首次启动会有一个许可协议的弹窗,点接受,然后Docker引擎会在后台初始化。这一过程第一次启动可能要等一会儿,因为需要处理WSL2后端初始化。

启动完看托盘区的鲸鱼图标,如果图标不动或报错,右键打开Dashboard看看具体提示。正常情况Dashboard里会显示Docker Engine正在运行,并带你进入欢迎界面。

5.3 Windows端验证运行

验证安装的最快方式,打开命令行工具(PowerShell或者新版Windows Terminal都行),执行:

docker --version docker compose version

能正常输出版本号就是好的开始。再跑一下官方测试镜像:

docker run hello-world

如果看到结尾有 “Hello from Docker!” 就说明整个链路完全打通了。

这一步如果提示找不到命令,多半是环境变量Path没生效,我建议退出当前终端再重新打开一次,一般就好了。如果还是不行,手动去C:\Program Files\Docker\Docker\resources\bin看一下是否存在docker.exe,存在就添加这个路径到用户环境变量。

5.4 Windows端常见启动失败与解决

启动失败报错的人太多,把高频的几个场景列出来:

  • 报错 “Virtualization support not detected”:说明电脑的CPU虚拟化功能在BIOS里没开,或者被其他虚拟机软件占用了。去BIOS设置里找Intel Virtualization Technology或AMD SVM,启用后重启。
  • 报错 “Docker Desktop failed to start because virtualisation support wasn’t detected”:大概率是Windows功能里的虚拟机平台没启用,管理员PowerShell执行Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -All,重启后再试。
  • 启动后一直停留在Starting状态:建议先完全退出Docker Desktop,然后在PowerShell里执行wsl --shutdown,再重新启动Docker Desktop。实测这个组合能解决一半以上的假死问题。
  • 如果系统开启了内核级隔离或凭据保护,WSL2后端也会被拦截,需要在“Windows安全中心>设备安全性>内核隔离”里暂时关闭内存完整性再测试。这个改动记得在不需要时恢复。

6. Docker Desktop在macOS上的安装实操

6.1 macOS安装步骤与通用注意点

macOS上的Docker Desktop安装相对省心,从官网下载对应芯片的安装包。Intel版本和Apple Silicon版本的安装包不通用,下载时留意系统提示。不确定芯片类型的话,点左上角苹果图标→关于本机,中间会明确写着“Apple M3”之类的型号。

拿到dmg文件后,把Docker.app拖进Applications文件夹,从启动台打开。第一次启动时macOS会弹窗提示“来自互联网的下载”,点击打开即可。之后在系统设置→隐私与安全性里可能还会要求“允许”,同样允许。

还有一个容易忽略的地方:Docker Desktop默认会占用一定内存,如果要同时跑多个大容器,比如MySQL、Redis加后端服务同时开,打开Docker Desktop的设置,把Memory调整到4GB以上。

Apple Silicon芯片上跑Docker镜像,很多官方镜像都提供了arm64架构的版本,拉取时Docker会自动选择合适平台架构,非常可靠。如果碰上某些老镜像只有x86版本,可以手动加--platform linux/amd64运行,但性能会打折。相对没那么必须。

6.2 macOS版安装后的常规验证与Docker配置

在macOS终端里执行:

docker info

这个命令能一次性看到Docker引擎的详细信息,包括存储驱动、系统版本、镜像数量等。看到Server Version一栏有内容,代表引擎已经正常运转。

macOS版Docker Desktop自带一个轻量级仪表盘,容器运行状态、日志检索、镜像管理都能在界面上操作。但我也见过不少初学者习惯性依赖图形界面,导致命令行不熟练。这里我建议日常多用命令行做常规操作,图形界面只在排查资源和端口时辅助使用,否则换到服务器环境会措手不及。

再单独提一下Docker Desktop设置里的“File sharing”板块。macOS对文件权限卡得比较死,如果你后续想挂载本地目录进容器,需要先确认该目录是否已在File Sharing的允许列表里。否则容器里能看到路径但文件夹是空的,甚至直接权限拒绝。

7. 装完Docker后必做的三件事:体验、配置与加固

7.1 什么都不用改,先拉一个镜像跑起来

装好Docker后我第一次操作,建议先感受一次真正的“镜像到容器”全流程:

docker run -d --name nginx-test -p 8080:80 nginx:latest

这行命令会从公共镜像仓库拉取最新的nginx镜像,然后以守护模式启动一个名为nginx-test的容器,把宿主机的8080端口映射到容器内的80端口。启动完成后浏览器访问http://localhost:8080,能看到Nginx欢迎页就说明容器已经在正常工作。

再看一眼常用命令:

docker ps docker logs nginx-test docker exec -it nginx-test bash docker stop nginx-test docker rm nginx-test

这套组合拳能让你最快理解容器生命周期里最常见的几个动作:查看、看日志、进容器内部、停止、删除。以后你会反复用到它们。

7.2 处理“启动docker”时最常遇到的权限与网络问题

Linux服务器上装好Docker后,第一次敲docker ps如果直接报权限错误,说明当前用户没在docker组里。解决方法是:

sudo groupadd docker sudo usermod -aG docker $USER newgrp docker

然后重新打开终端再执行。这个问题的常见程度极高,我几乎每次帮别人装Linux服务器Docker时都会遇到。

另一个高频问题是容器能启动,但宿主机“外部”访问不到端口。排查思路不要上来就改防火墙,先看映射关系:

docker ps -n 5

确认端口映射列里有0.0.0.0:8080->80/tcp这样的输出,说明端口映射本身没问题。再去检查云安全组是否放行了对应端口,很多时候卡在云平台的一块安全组规则上。

如果容器之间要互相访问,建议直接创建一个自定义网络:

docker network create mynet docker run -d --network mynet --name app1 nginx:latest docker run -d --network mynet --name app2 nginx:latest

在同一个自定义网络里的容器可以直接用名字互相连接,比如curl http://app1:80,无需依赖宿主机端口转发,这也是生产级微服务架构中最简单直接的容器间通信方式。

7.3 给镜像换个“更快的拉取通道”

镜像拉取速度受限于网络和仓库服务器,它本身是常规的网络问题而不涉及任何其他议题。你可以在Docker的配置文件中设置公共镜像加速服务地址。Linux下对应文件是/etc/docker/daemon.json:

{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }

Windows和macOS则是打开Docker Desktop的Settings,找到Docker Engine选项,在JSON配置里同样加上registry-mirrors这一段。改完点应用并重启引擎。

这一招能明显缩短docker pull的等待时间。需要说明的是,有些镜像直接在官方仓库里标记为不可公开获取,这类镜像在配置任何加速地址都无法拉到。如果你需要的是这类业务镜像或私有仓库镜像,建议把内网仓库地址填到insecure-registries字段里,表示信任并允许访问这个HTTP仓库,但生产环境使用私有仓库时还是要配置TLS证书,不要图省事长期开着免校验。

8. 常用脚手架的Docker化部署:MySQL、Redis与GitLab

8.1 一条命令拉起MySQL 8.0并完成基础配置

热搜里大量出现“docker安装mysql8.0并使用”,确实,MySQL是Docker化部署的最典型案例。先创建数据持久化目录:

mkdir -p /data/mysql/data

再运行容器:

docker run -d \ --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=YourPassWD \ -v /data/mysql/data:/var/lib/mysql \ -v /etc/localtime:/etc/localtime:ro \ mysql:8.0

这里有三处值得留心:

  • -v /data/mysql/data:/var/lib/mysql:把容器内数据库数据映射到宿主机目录,容器删了数据还在。
  • -v /etc/localtime:/etc/localtime:ro:让容器用宿主机时区,避免出现数据记录时间差8小时。
  • -e MYSQL_ROOT_PASSWORD:初始化root密码,务必改成强密码。

安装好之后可以这样验证连接:

docker exec -it mysql8 mysql -uroot -p

生产环境不建议直接用root账号去连业务,而是进入容器后创建一个独立账号并授权指定数据库。MySQL容器删掉重建后,只要是同一个数据目录,数据都不会丢,这是Docker化后最有价值的一点。

8.2 Redis主从或单机部署的常用思路

Redis的Docker化部署在开发环境非常常用。单机版拉起来很简单:

docker run -d --name redis7 -p 6379:6379 redis:7

如果需要配置密码,加一个参数:

docker run -d --name redis7 -p 6379:6379 -e REDIS_PASSWORD=should-be-safe redis:7

做主从时,不推荐直接宿主端口把多个Redis都暴露出来,更好的方式是创建自定义网络,然后使用容器名互相通信。从节点启动时通过--replicaof redisMaster 6379指定主节点,这里的redisMaster是主节点容器名字,网络内部解析由Docker完成。

我看到过有人主从没搞成功,最后发现是自定义网络里主从之间防火墙挡了,Docker的自定义网络默认全放通,所以这类问题基本出在宿主防火墙或者云安全组上。

8.3 GitLab和青龙依赖管理:容器化让部署变得简单

GitLab是另一个适合Docker化的典型应用,尤其在做私有代码托管时,一条Compose文件就能拉起一整套服务。注意GitLab对内存要求较高,8G内存以下跑全功能会比较吃力,可以关掉不需要的组件来减负。

至于青龙面板这类自动化定时任务类项目,它的核心价值在于把依赖管理、环境变量和定时任务做了体系化。用Docker装青龙步骤非常清晰:

docker run -d \ --name qinglong \ -p 5700:5700 \ -v /data/qinglong:/ql/data \ whyour/qinglong:latest

这种场景正好解释了为什么Docker会让部署变得省心:你不用关心宿主机上的Node.js版本、Python环境是否冲突,镜像内部的依赖体系独立存在。即使系统重装,只要卷目录还在,配置和数据就可以无缝衔接。

9. 使用Docker过程中的常见问题与排查实录

9.1 Docker启动/权限与网络相关报错速查表

报错现场直接原因解决办法
docker: permission denied当前用户不在docker组加入docker组并重新登录
Cannot connect to the Docker daemonDocker引擎未启动执行systemctl start docker并检查运行状态
Virtualization support not detectedBIOS虚拟化未开启重启进BIOS开启虚拟化项
WSL kernel version too lowWSL2内核过旧执行wsl --update后重启
pull access denied镜像不存在或权限不足换公开可获取镜像,或登录私有仓库
request returned unauthorized未登录仓库或仓库密钥过期docker login重新认证
container is not running容器已经退出查看docker logs 容器名找退出原因
address already in use宿主端口被占用换映射端口或停掉占用进程
no space left on device磁盘或inode满清理日志图像、扩容磁盘
DOCKER_HOST env 影响环境变量被残留设置污染在终端里临时unset DOCKER_HOST测试

9.2 容器时区、日志与存储空间问题

容器时区问题可以在启动容器时直接挂载宿主机时区文件:

-v /etc/timezone:/etc/timezone:ro \ -v /etc/localtime:/etc/localtime:ro

如果镜像里没有时区文件,也可以在容器里执行:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

日志霸占磁盘也是一个容易被忽略的点。运行一段时间的容器,日志文件可能膨胀到几个G。可以在启动时设置日志驱动上限:

--log-driver json-file --log-opt max-size=10m --log-opt max-file=3

同时定期清理悬空镜像和停止状态的容器:

docker system df docker container prune docker image prune

只要提前在编排阶段就加上日志限制和清理策略,后期运维压力会小很多。

10. 我个人在实际操作中的几点体会

装Docker本身的步骤并不算复杂,真正的门道全在细节里。我在多次帮人排障后发现,绝大多数问题出在两个地方:一是没有提前理解当前平台下Docker依赖的底层能力(比如Windows的虚拟化、WSL2、Windows功能项),二是装完不做验证就直接进入业务部署,出了错不知道是该查Docker还是查业务应用本身。

建议每一位刚接触Docker的朋友,装完后至少跑一遍docker run hello-world,再看一眼docker info里的版本和存储驱动,再跑一个带端口映射的真实应用(比如Nginx或者MySQL)。这三步加起来不过十分钟,却能把安装成果真正落到实处。这个习惯我保持至今,换任何一台新机器都会第一时间确认Docker环境健康,再开始干正事。

最后再分享一个小技巧:平时写Docker相关操作时,尽量用docker run命令把关键参数(端口、卷、环境变量)写完整,不要依赖交互式操作。这样你可以在出问题时快速复盘,也能顺手把完整命令分享给团队成员,别人照着跑就能复现你的环境。Docker最大的价值就是可复现性,只要把这一条用好,你会发现环境问题会少掉一大半。

返回列表