通过 docker ps命令,你可以验证容器是否在运行:
$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd74f2ceb5f3a alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds zen_pascal
查看运行中的容器,运行下面的命令:
$ sudo docker ps
输出结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf7e04eed577e 20fffa419e3a "/bin/bash" 6 minutes ago Up 6 minutes brave_mclean2f2a5b826762 ubuntu:latest "/bin/bash" 18 minutes ago Up 18 minutes hungry_leavitt
这里,
现在看一下下面的例子:
$ sudo docker run -it -d alpine:latest2af79e97a825c91bf374b4862b9e7c22fc22acd1598005e8bea3439805ec335d$ sudo docker run -it -d alpine:latest80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES80b53b7e661d alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds bold_margulis2af79e97a825 alpine:latest "/bin/sh" 6 seconds ago Up 5 seconds recursing_taussig
从上面的结果可以看到,尽管我用同一个 Docker 镜像创建了两个容器,它们获得了不同的 ID 和名字。
我们看一下当前运行的容器列表:
$ sudo docker ps
输出结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES397111fac537 alpine:latest "/bin/sh" 2 seconds ago Up 2 seconds ostechnix_alpine80b53b7e661d alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes bold_margulis2af79e97a825 alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes recursing_taussig
现在你就可以从这个新的 Docker 镜像创建行容器了,用之前的命令:
$ sudo docker run -it ostechnix/ubuntu_apache
12、移除容器
当你在 Docker 容器中完成所有开发后,如果你不需要它们了,你可以删掉它们。
为此,首先我们需要终止运行中的容器。
用这个命令来看一下运行中的容器:
$ sudo docker ps
输出结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES377e6d77ebb5 ubuntu:latest "bash" 7 minutes ago Up 7 minutes elegant_beaver
通过使用它的 ID 来终止运行中的容器:
$ sudo docker stop 377e6d77ebb5
现在,使用这个命令删除容器:
$ sudo docker rm 377e6d77ebb5
同样,如果不再需要所有的容器,关闭并删除它们。
一个一个的删除多个容器会是一项繁琐的工作。所以,我们可以把所有停止的容器一次性删掉,运行:
$ sudo docker container prune
敲 Y然后回车键,这些容器就被删掉了。
WARNING! This will remove all stopped containers.Are you sure you want to continue? [y/N] yDeleted Containers:397111fac5374921b974721ee646b2d5fbae61ca9c6e8b90fbf47952f382a46b80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a[...]Total reclaimed space: 176B
这个命令只有在最新版中有效。
使用下面的命令来验证是否所有容器都被删除了:
$ sudo docker ps -a
如果看不到任何结果,说明所有容器被删掉了。
13、删除 Docker 镜像
记住,在删除所有镜像之前,首先要删掉所有从那些镜像创建的容器。
当你删掉容器后,你可以删掉你不需要的 Docker 镜像。
列出所有下载的 Docker 镜像:
$ sudo docker images
输出结果:
REPOSITORY TAG IMAGE ID CREATED SIZEostechnix/ubuntu_apache latest bc5e5f95ca59 14 minutes ago 229MBdebian latest d2780094a226 11 days ago 124MBubuntu latest 27941809078c 3 weeks ago 77.8MBubuntu 20.04 20fffa419e3a 3 weeks ago 72.8MBalpine latest e66264b98777 5 weeks ago 5.52MB
从上面可以看到,在我们的主机上有 5 个 Docker 镜像。
删掉所有未运行的容器、所有镜像、构建的缓存、所有网络,运行:
$ sudo docker system prune -a
使用这个命令的时候要注意,它会删掉所有没有使用的容器、网络、镜像(包括 挂起dangling和未使用unreferenced 的)
默认情况下,即使当前没有容器在使用磁盘卷volumes,为防止重要数据被删除,磁盘卷也不会被删除。
如果你想删掉所有东西,包括分配的卷,使用 --volumes标签。
$ sudo docker system prune -a --volumes
Docker 问题汇总
如果 Docker 镜像正在被运行或停止的容器使用,Docker 不会允许你删除这些镜像。
比如,当我尝试从一个以前的 Ubuntu 服务器上删除 ID 为 b72889fa879c的 Docker 镜像。我会得到下面的错误:
Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377
这是因为你想删除的 Docker 镜像正在被另一个容器使用。
所以,我们先查看一下运行中的容器,使用命令:
$ sudo docker ps
输出结果:
噢,没有运行中的容器。
我们在看一下所有的容器(运行和停止的),用这个命令:
$ sudo docker ps -a
输出结果:
可以看到,仍然有停止的容器在使用其中一个 Docker 镜像。所以,我们先把所有容器删掉。
比如:
$ sudo docker rm 12e892156219
类似地,向上面那样,用对应容器的 ID 将它们都删除。