docker文档

卸载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

![](https://www.jgaonet.com/mindoc/uploads/inductive-set/images/m_adc85b3579e6d404eb149a494d363593_r.png)

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

![](https://www.jgaonet.com/mindoc/uploads/inductive-set/images/m_9a89ad7488f7cf9ee407f33886cb516d_r.png)

如果是`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  创建时间:2023-04-20 16:23
最后编辑:admin  更新时间:2024-04-03 16:45