docker删除镜像 提示Error: No such image: nginx

最近打算删除掉docker镜像但是发现有几个镜像就是删除不了,加了-f强制删除也不行,一直报Error: No such container的错误,最后终于找到了办法直接删除文件,步骤如下:

切换到root用户然后:

service docker stop

rm -rf /var/lib/docker
start docker.service
到这里就会发现镜像已经删除干净。

附docker常用命令:

重启docker服务  sudo service docker restart

关闭docker服务  docker service docker stop

开启docker服务  docker service docker start

查看当前运行的容器:docker ps

查询存在的容器:docker ps -a

删除容器:docker -rm  CONTAINERID 

强制删除容器:docker -rm -f  CONTAINERID 

不能够删除一个正在运行的容器,会报错。需要先停止容器。

查看镜像:docker images

删除镜像:docker -rmi  IMAGEID  

强制删除镜像:docker -rmi -f  IMAGEID  

利用镜像创建容器:docker run --name centos -itd centos:latest 

注:-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面,--name指定容器名。

docker run -d -t --name hello-world -p 8762:8762 -v /home/app/hello.jar:/home/app/hello.jar java8 java -jar /home/app/hello.jar --spring.profiles.active=dev
-d 表示在后台启动
-p 8762:8762 表示将容器的端口 映射成宿主主机的端口,否则8762端口访问不到
-v /home/app/hello.jar:/home/app/hello.jar 表示将宿主主机的jar文件,映射到容器中(分号前为宿主主机的路径,分号后为容器中的路径)
--name hello-world表示为该容器取一个全局唯一的名称,这里我取的名称为hello-world
java8 表示镜像文件的名称(为Java镜像重命名后的名称)
java -jar /home/app/hello.jar 表示运行jar包,注意:这里的jar包为容器中的位置,是通过前面的-v属性映射的
--spring.profiles.active=dev 表示spring boot项目配置文件选用dev的配置

如果使用systemctl启动服务需要用下面的方式以超级权限启动,否则会报Failed to get D-Bus connection: Operation not permitted错误:

docker run --name centos -itd --privileged=true centos:latest /usr/sbin/init

进入后台运行的容器:docker exec -it containname /bin/bash

启动容器:docker start containername

停止容器:docker stop containername

停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q)

如果想要删除所有container的话再加一个指令: docker rm $(docker ps -a -q)

注:-a标志列出所有容器,-q标志只列出容器的ID,然后传递给rm命令

删除全部image的:  docker rmi $(docker images -q)

重命名一个容器:docker rename old_name new_name

要获取所有容器名称及其IP地址:

docker inspect -f '{undefined{.Name}} - {undefined{.NetworkSettings.IPAddress }}' $(docker ps -aq)

进入容器内部后可以使用下面命令获取目前容器的ip:

cat /etc/hosts

在docker容器和宿主机之间复制文件:

切换为root用户然后:

从主机复制到容器 docker cp host_path containerID:container_path

从容器复制到主机 docker cp containerID:container_path host_path

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误是由于脚本中的筛选逻辑导致的。脚本在筛选镜像时使用了 `grep` 命令,而 `grep` 命令是基于文本行进行匹配的,可能会出现部分匹配的情况。 为了解决这个问题,我们可以使用 `awk` 命令来进行筛选和计数镜像。请尝试以下修改后的脚本: ```bash #!/bin/bash # 获取所有镜像列表,并按照创建时间排序 image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2) # 获取所有镜像image_names=$(echo "$image_list" | awk -F ':' '{print $1}' | uniq) # 遍历每个镜像名 for image_name in $image_names; do # 获取特定镜像名的镜像列表 filtered_images=$(echo "$image_list" | awk -F ':' -v name="$image_name" '$1 == name') # 获取镜像数量 image_count=$(echo "$filtered_images" | wc -l) # 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个 if [ $image_count -gt 3 ]; then images_to_delete=$((image_count - 2)) images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1) for image in $images_to_delete_list; do docker image rm $image done echo "针对镜像名 $image_name:旧的镜像删除,只保留最近的两个镜像。" else echo "针对镜像名 $image_name:无需删除镜像,数量未超过3个。" fi done ``` 这个修改后的脚本使用了 `awk` 命令来提取镜像名,并进行完整匹配。这样可以确保镜像名的准确性,避免了部分匹配的问题。 请再次尝试执行脚本,看看是否能够正常删除旧的镜像并保留最近的两个镜像。如果还有其他问题,请随时告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值