docker文档
- Docker 安装文档
- Docker 菜鸟教程
- Docker 官方主页
- Docker 官方博客
- Docker 官方文档
- Docker Store
- Docker Cloud
- Docker Hub
- Docker 的源代码仓库
- Docker 发布版本历史
- Docker 常见问题
- Docker 远端应用 API
卸载docker
官网方式,腾讯云服务器亲测卸载失败,使用下面的指定删除方式成功
`
shell script
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
注:运行中的docker是不能用此方法卸载的,卸载前先查看docker的运行状态
```shell script
systemctl status docker
若是 Active: active(running),则需要先停止docker
`
shell script
systemctl stop docker
查看yum安装的docker文件包
```shell script
yum list installed | grep docker
查看docker的相关rpm源文件
`
shell script
rpm -pa | grep docker
删除所有的docker安装文件包(按实际情况修改)
```shell script
yum -y remove containerd.io.x86_64
yum -y remove docker-ce.x86_64
yum -y remove docker-ce-cli.x86_64
删除docker的镜像文件,默认在/var/lib/docker目录下
`
shell script
rm -rf /var/lib/docker
## 安装docker
设置仓库
```shell script
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装docker
`
shell script
sudo yum install docker-ce docker-ce-cli containerd.io
```注:docker-ce-cli 作用是docker命令行工具包 *containerd.io* 作用是容器接口相关包
启动docker并设置空开机自启
systemctl start docker && systemctl enable docker
腾讯云服务器安装docker
`
shell script
yum update
yum install epel-release -y
yum clean all
yum list
```shell script
yum install docker-io -y
systemctl start docker
docker info
使用docker
命令大全
- 容器生命周期管理
`
shell script
run
start/stop/restart
kill
rm
pause/unpause
create
exec
* 容器操作
```shell
ps
inspect
top
attach
events
logs
wait
export
port
- 容器rootfs命令
commit
cp
diff
- 镜像仓库
login
pull
push
search
- 本地镜像管理
images
rmi
tag
build
history
save
load
import
info|version
info
version
管理docker守护进程
- 运行 Docker 守护进程
`
shell script
systemctl start docker
* 停止 Docker 守护进程
```shell script
systemctl stop docker
- 重启 Docker 守护进程
`
shell script
systemctl restart docker
### 管理镜像
docker pull nginx
* 修改标签:您可以修改镜像标签以便记忆区分
```shell script
docker tag docker.io/nginx:latest tencentyun/nginx:v1
- 查看已有镜像
`
shell script
docker images
* 强制删除镜像
```shell script
docker rmi -f tencentyun/nginx:v1
- 导出镜像
`
shell script
docker export -o mysql-date +%Y%m%d
.tar a404c6c174a2
docker save -o collect.tar mysql redis
* 导入镜像
docker import <文件路径> <容器名>
* 设置镜像标签
```shell script
docker tag 860c279d2fec runoob/centos:dev
- 查看容器占用磁盘大小
docker system df
docker system df -v
- 查看启动容器的命令
# 通过docker --no-trunc参数来详细展示容器运行命令
docker ps -a --no-trunc | grep container_name
1,在容器外部,物理机上,可以用下面命令
docker inspect <container_name> # 可以是container_name或者container_id
# 默认的输出信息很多,可以通过-f, --format格式化输出:
docker inspect --format='{{.NetworkSettings.Networks.bridge.IPAddress}}' <container_name> # format是go语言的template,还有其他的用法
2,如果在容器内部。可以用下面命令
ps -ef # 其中1号进程就是command启动命令
- 备注
docker save 保存的是镜像(image),docker export 保存的是容器(container)
docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像
docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称
管理容器
启动并进入容器
shell script docker run -it ImageId /bin/bash
退出容器:执行 exit 命令,退出当前容器
进入后台运行的容器
`
shell script
docker exec -it 容器 ID /bin/bash
* 将容器做成镜像
```shell script
docker commit <容器 ID 或容器名> [<仓库名>[:<标签>]]
- 进入后台运行的容器
`
shell script
docker exec -it 容器 ID /bin/bash
### 制作镜像
* 执行以下命令,打开 Dockerfile 文件
```shell script
vim Dockerfile
- 打包需要运行的文件
GOOS=linux go build -mod vendor
- 按 i 切换至编辑模式,添加如下内容
FROM alpine:latest # 基础镜像
RUN mkdir -p /data/service/blog/bin # 执行命令,每次执行都会多一层镜像,可用 && 合并执行命令
ADD blog /data/service/blog/bin # 添加文件
WORKDIR /data/service/blog # 设置工作目录
EXPOSE 8888 # 声明端口
EXPOSE 8080
CMD ./bin/blog #
按 Esc,输入 :wq,保存文件并返回
执行以下命令,构建镜像
`
shell script
docker build -t blog:v1 . #.是 Dockerfile 文件的路径,不能忽略。
* 执行以下命令,查看镜像是否创建成功
```shell script
docker images
- 依次执行以下命令,运行容器并查看容器
docker run -d nginxos:v1 #后台运行容器。
docker ps #查看当前运行中的容器。
docker ps -a #查看所有容器,包括未运行中的。
docker logs CONTAINER ID/IMAGE #如未查看到刚才运行的容器,则用容器 ID 或者名字查看启动日志排错。
- 依次执行以下命令,制作镜像
docker commit fb2844b6**** nginxweb:v2 #commit 参数后添加容器 ID 和构建新镜像的名称和版本号。
docker images #列出本地(已下载的和本地创建的)镜像。
- 执行以下命令,将镜像推送至远程仓库。
默认推送到 Docker Hub。您需要先登录 Docker,为镜像绑定标签,将镜像命名为 Docker 用户名/镜像名:标签的格式,最终完成推送
docker login #执行后输入镜像仓库用户名及密码
docker tag [镜像名]:[标签] [用户名]:[标签]
docker push [用户名]:[标签]
options说明
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
docker国内镜像
阿里云的加速器:https://help.aliyun.com/document_detail/60750.html
网易加速器:http://hub-mirror.c.163.com
官方中国加速器:https://registry.docker-cn.com
ustc 的镜像:https://docker.mirrors.ustc.edu.cn
daocloud:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)
docker容器容器重启
- 启动时添加命令
docker run --restart=always
- 已启动的容器则更新启动命令
docker update --restart=always <CONTAINER ID>
dockerfile-指令
FROM
定制的镜像都是基于 FROM 的镜像; 如果后面接的是 nginx,后续的操作都是基于 nginx
RUN
用于执行后面跟着的命令行命令, 有shell和exec两种格式 shell: RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令 exec: RUN ["可执行文件", "参数1", "参数2"] # 如--RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline 注意: Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。可以使用 && 合并多个RUN指令,这样只会创建一层镜像
COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径 格式: COPY [--chown=<user>:<group>] <源路径1>... <目标路径> COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"] 例如: COPY hom* /mydir/ COPY hom?.txt /mydir/
ADD
ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY) ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。 ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定
CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同: CMD 在docker run 时运行。 RUN 是在 docker build 作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。 注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效 格式: CMD <shell 命令> CMD ["<可执行文件或命令>","<param1>","<param2>",...] CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。 但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序。 优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。 注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。 格式: ENTRYPOINT ["<executeable>","<param1>","<param2>",...] 可以搭配 CMD 命令使用:一般是变参才会使用 CMD 如: FROM nginx ENTRYPOINT ["nginx", "-c"] # 定参 CMD ["/etc/nginx/nginx.conf"] # 变参 docker run nginx:test 最终执行命令为 nginx -c /etc/nginx/nginx.conf docker run nginx:test -c /etc/nginx/new.conf 最终执行命令为 nginx -c /etc/nginx/new.conf
ENV
设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量 格式: ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>... 例如: ENV NODE_VERSION 7.2.0 RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \ && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
ARG
构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。 构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖 ARG <参数名>[=<默认值>]
VOLUME
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷 作用: 避免重要的数据,因容器重启而丢失,这是非常致命的。 避免容器不断变大 格式: VOLUME ["<路径1>", "<路径2>"...] VOLUME <路径> 在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点
EXPOSE
仅仅只是声明端口 作用: 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口 格式: EXPOSE <端口1> [<端口2>...]
WORKDIR
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。 docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在 格式: WORKDIR <工作目录路径>
USER
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在) 格式: USER <用户名>[:<用户组>]
HEALTHCHECK
用于指定某个程序或者指令来监控 docker 容器服务的运行状态 格式: HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令 HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令 HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
ONBUILD
用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令 格式: ONBUILD <其它指令>
LABEL
LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式 格式: LABEL <key>=<value> <key>=<value> <key>=<value> ... 例如添加镜像作者: LABEL org.opencontainers.image.authors="runoob"
编译GO项目
默认项目为
blog
因为Docker内核依赖于Linux开发的,所以要把GO的编译环境设置成linux,不然镜像启动的时候会报
exec format error
错误CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
其中
CGO_ENABLED=0
是关闭c/c++的交叉编译;GOOS=linux
是设置linux环境;GOARCH=amd64
是设置64位系统环境GOOS的可选项
linux Linux系统 darwin MacOSxitong windows Windows系统 freebsd Unix系统
创建Dockerfile并填写内容
!> 默认在项目根目录
tee <<EOF > Dockerfile
FROM alpine:latest
RUN mkdir -p /data/service/blog/bin
COPY blog /data/service/blog/bin
WORKDIR /data/service/blog
EXPOSE 8888
CMD ./bin/blog
EOF
此处使用alpine
作为基础镜像,是因为这个镜像包非常小,若果以golang
作为基础镜像,打出来的包会有几百兆。
打包镜像
docker build -f Dockerfile -t blog:v4 .
!> 最后的 . 是Dockerfile的路径,不能省略
这样打包,每次都需要修改tag,不方便,我们可以创建一个打包脚本build.sh
,用变量作为tag的数据进行打包
#!/bin/bash
Version=`date +%Y%m%d.%H%M%S`.`git rev-parse HEAD|cut -c1-6`.dev
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
docker build -f Dockerfile -t blog:v${Version} .
再赋予执行权限 chmod +x build.sh
后执行
./build.sh
使用 docker images
查看,会发现我们打包的镜像已经在docker中存在了
REPOSITORY TAG IMAGE ID CREATED SIZE
blog v20211118.161627.b79686.dev e2334212fdf9 37 minutes ago 22.3MB
blog v20211118.162330.b79686.dev e2334212fdf9 37 minutes ago 22.3MB
!> 当我们多次以同一个编译文件执行打包镜像的时候,会出现多个镜像imageid相同的情况,以imageid删除镜像就会报错,这时候就需要以docker rmi REPOSITORY:TAG
来删除镜像
为了避免镜像出现相同imageid的情况,我们可以在编译的时候,修改下文件版本数据
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
修改为
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-X main.Version=${Version}"
这样每次打包的镜像imageid就不会相同了
将容器重新打包成镜像
docker commit -a "panjinghong" -m "基于ubuntu镜像,使用apt下载插件,添加ping、curl等功能"
commit命令的参数详情
Option | 功能 |
---|---|
-a | 指定新镜像作者 |
-c | 使用 Dockerfile 指令来创建镜像 |
-m | 提交生成镜像的说明信息 |
-p | 在 commit 时,将容器暂停 |
提交镜像到仓库
如果我们想提交打包的镜像到远程仓库中,可以先登录到远程仓库,再提交上去
docker login ${Repostry} --username ${username} --password ${password}
docker push ${ImageName}
问题
镜像启动失败”exec format error”
- GO镜像启动:standard_init_linux.go:190: exec user process caused “exec format error”
!> 如果出现以上错误是因为你的golang在build时没有指定为linux平台,因为Docker内核依赖于Linux开发的,所以在mac os启动Docker时还是使用Boot2Docker引起的,可以指定构建平台
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
- WARNING: The requested image’s platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested
使用docker image inspect {image}
可以查看信息
可以使用 --platform linux/amd64
来改变镜像的运行环境,更多build的运行参数可以使用docker builder build --help
查看
docker build --platform linux/amd64 -f Dockerfile -t ccr.ccs.tencentyun.com/jgaonet/docs:v${Version} .
!> 若是项同时构建多个体系的镜像,可以使用 buildx 建立多个体系的构建
docker buildx build --platform linux/amd64,linux/arm64 .
或许执行打包的时候会出现错误
ERROR: multiple platforms feature is currently not supported for docker driver. Please switch to a different driver (eg. "docker buildx create --use")
这是因为当前docker没有这个驱动,执行 docker buildx create --use
创建构建任务节点之后再进行打包处理
此时会自动下载需要的驱动,但是耗时会很长,需要等待。
!> 默认情况下多平台打包的镜像无法通过docker images
查看
所以在构建镜像的同时使用 --push
把镜像推送到远程,这个需要在构建前先登陆到远程仓库。
docker buildx build --platform linux/amd64,linux/arm64 -f Dockerfile -t ccr.ccs.tencentyun.com/jgaonet/docs:v${Version} --push .
pull镜像失败
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
这是因为从 2020-11-02 开始,官方的 Docker Hub 开始对 pull 请求加上了限制,限制为匿名用户(未登录),每分钟只能拉 100 次 image,登录的免费用户每分钟拉 200 次 镜像
解决方式
修改 /etc/docker/daemon.json 中的
{
"registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com"],
}
但是此镜像也可能出现问题,对于腾询服务器,配置已经默认如下
http://docker.oa.com:8080
http://csighub.tencentyun.com
只需要把 http://docker.oa.com:8080
去掉即可
重启docker
systemctl daemon-reload && systemctl restart docker
redis启动失败
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
*** FATAL CONFIG FILE ERROR (Redis 6.0.8) ***
Reading the configuration file, at line 341
>>> 'set-proc-title yes'
Bad directive or wrong number of arguments
这是环境变量冲突导致的,需要把redis相关的环境变量去除,则启动成功
docker的overlay2文件夹太大
`
shell script
docker system prune
命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
### 安装过docker的系统重装系统再次安装后启动报错
v 19 15:06:33 VM_0_16_centos dockerd-current[10379]: time=”2021-11-19T15:06:33.262087118+08:00” level=info msg=”Firewalld running: false”
Nov 19 15:06:33 VM_0_16_centos dockerd-current[10379]: Error starting daemon: Error initializing network controller: error obtaining controll…nsmod?)
Nov 19 15:06:33 VM_0_16_centos dockerd-current[10379]: Perhaps iptables or your kernel needs to be upgraded.
Nov 19 15:06:33 VM_0_16_centos dockerd-current[10379]: (exit status 3)
Nov 19 15:06:33 VM_0_16_centos systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Nov 19 15:06:33 VM_0_16_centos systemd[1]: Failed to start Docker Application Container Engine.
Nov 19 15:06:33 VM_0_16_centos systemd[1]: Unit docker.service entered failed state.
Nov 19 15:06:33 VM_0_16_centos systemd[1]: docker.service failed.
使用命令 `journalctl -xe | grep docker` 查看日志得
Nov 19 15:14:21 VM_0_16_centos dockerd-current[13155]: time=”2021-11-19T15:14:21.926382325+08:00” level=warning msg=”could not change group /var/run/docker.sock to docker: group docker not found”
Nov 19 15:14:21 VM_0_16_centos dockerd-current[13155]: time=”2021-11-19T15:14:21.934382961+08:00” level=info msg=”libcontainerd: new containerd process, pid: 13162”
Nov 19 15:14:21 VM_0_16_centos dockerd-current[13155]: time=”2021-11-19T15:14:21.964378867+08:00” level=warning msg=”Docker could not enable SELinux on the host system”
Nov 19 15:14:21 VM_0_16_centos dockerd-current[13155]: time=”2021-11-19T15:14:21.974320603+08:00” level=info msg=”Graph migration to content-addressability took 0.00 seconds”
Nov 19 15:14:21 VM_0_16_centos dockerd-current[13155]: time=”2021-11-19T15:14:21.979261111+08:00” level=info msg=”Loading containers: start.”
Nov 19 15:14:21 VM_0_16_centos dockerd-current[13155]: time=”2021-11-19T15:14:21.984177860+08:00” level=warning msg=”Running modprobe nf_nat failed with message: modprobe: WARNING: Module nf_nat not found.
, error: exit status 1”
Nov 19 15:14:21 VM_0_16_centos dockerd-current[13155]: time=”2021-11-19T15:14:21.994935787+08:00” level=info msg=”Firewalld running: false”
Nov 19 15:14:22 VM_0_16_centos dockerd-current[13155]: Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain: iptables failed: iptables –wait -t nat -N DOCKER: iptables v1.4.21: can’t initialize iptables table `nat’: Table does not exist (do you need to insmod?)
Nov 19 15:14:22 VM_0_16_centos dockerd-current[13155]: Perhaps iptables or your kernel needs to be upgraded.
Nov 19 15:14:22 VM_0_16_centos dockerd-current[13155]: (exit status 3)
Nov 19 15:14:22 VM_0_16_centos systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
– Subject: Unit docker.service has failed
– Unit docker.service has failed.
看日志得知是 `iptables` 的设置有问题,使用 `ip a` 查看
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:52:6b:ea brd ff:ff:ff:ff:ff:ff
inet 192.168.64.4/24 brd 192.168.64.255 scope global eth0
valid_lft forever preferred_lft forever
发现没有 `docker0` 的桥接网络,则手动添加一个
ip link add name docker0 type bridge
ip addr add dev docker0 172.17.0.1/16
再次使用 `ip a` 查看,则会发现多了 `docker0`的网络
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:52:6b:ea brd ff:ff:ff:ff:ff:ff
inet 192.168.64.4/24 brd 192.168.64.255 scope global eth0
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
link/ether 16:e5:98:30:54:05 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
删除网桥使用 `brctl delbr docker0`
然后重新启动docker即可
### docker容器中没有yum

docker已经启动的容器中,没有我们想要的命令时,可以先查看系统 `cat /proc/version`

如果是`ubuntu`的话你可以使用apt命令去下载期望的命令
```shell
##跟新
apt-get update
apt install vim
apt install wget
#ping and ifconfig
apt install iputils-ping
apt install net-tools
docker镜像无法删除 Error:No such image:xxxxxx解决
docker镜像无法删除,通过 docker images
查看镜像明明存在就是删除不了。
删除提示:Error:No such image:xxxxxxx
那我们可以直接进入docker的镜像文件目录。直接删除相关文件即可。
cd /var/lib/docker/image/overlay2/imagedb/content/sha256
最后编辑:admin 更新时间:2024-05-14 10:08