编辑(2/19/21):自从几年前我提出这个原始问题以来,已经过去了很多时间,从那时起我看到了一系列的活动。我重新选择了一个答案,我认为它与解决这个问题的最本地化和最安全的选项一致(通常与docker compose相关)。虽然docker引入了prune
命令,但这通常是一个危险的操作,我会谨慎使用,因为您可能会无意中影响机器上的其他应用程序或设置
我在使用Docker 1.9删除Docker卷时遇到问题。1.
我已经删除了所有停止的容器,以便docker ps-a返回空。
当我使用docker volume ls
时,我得到了一大堆docker容器:
docker volume ls
DRIVER VOLUME NAME
local a94211ea91d66142886d72ec476ece477bb5d2e7e52a5d73b2f2f98f6efa6e66
local 4f673316d690ca2d41abbdc9bf980c7a3f8d67242d76562bbd44079f5f438317
local eb6ab93effc4b90a2162e6fab6eeeb65bd0e4bd8a9290e1bad503d2a47aa8a78
local 91acb0f7644aec16d23a70f63f70027899017a884dab1f33ac8c4cf0dabe5f2c
local 4932e2fbad8f7e6246af96208d45a266eae11329f1adf176955f80ca2e874f69
local 68fd38fc78a8f02364a94934e9dd3b5d10e51de5b2546e7497eb21d6a1e7b750
local 7043a9642614dd6e9ca013cdf662451d2b3df6b1dddff97211a65ccf9f4c6d47
#etc x 50
由于这些卷都不包含任何重要内容,因此我尝试使用docker volume rm$(docker volume ls-q)
清除所有卷。
在这个过程中,大多数人被移除,但我得到了回报:
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
对于其中相当大的一部分。如果我一开始没有任何容器,这些卷是如何使用的?
您可以使用这些功能来残忍地删除所有与Docker相关的内容:
removecontainers() {
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
}
armageddon() {
removecontainers
docker network prune -f
docker rmi -f $(docker images --filter dangling=true -qa)
docker volume rm $(docker volume ls --filter dangling=true -q)
docker rmi -f $(docker images -qa)
}
您可以将它们添加到~/Xrc
文件中,其中X是shell解释器(~/.bashrc
,如果您使用的是bash)文件,并通过执行源代码~/Xrc
重新加载它们。此外,您只需将它们复制粘贴到控制台,然后(不管您在准备函数之前选择了什么选项)即可运行:
armageddon
这对于一般的Docker清理也很有用。请记住,这也将删除您的图像,而不仅仅是您的容器(无论是否运行)和任何类型的卷。
该卷可能是通过docker compose
创建的?如果是,应通过以下方式将其移除:
docker-compose down --volumes
尼尔斯·贝奇·尼尔森的功劳!
问题内容: 我首先得到了我的nginx码头工人形象: 然后我开始了: 然后我停止了它: 然后我尝试重新启动它: 好吧,这是一个错误。但实际上,现在容器列表中没有任何内容: 为什么重启nginx镜像失败?如何解决? 问题答案: 这是因为 您已使用开关。 容器已停止且未移除 你发现它停止了 您可以使用以下命令简单地启动它: 编辑:替代方法 如果您想每次使用以下命令启动容器, 然后使用以下之一: 方法1
问题内容: 我试图在Docker容器中使用perf工具来记录给定命令。 设置为1,但是当我不放置该标志时,容器的行为就像是2 。 我可以使用,但是我在perf上运行的代码是不可信的,并且如果我可以通过允许使用perf工具承担一点安全风险,那么在容器上赋予特权权限似乎具有不同的风险级别。 还有其他使用容器内部perf的方法吗? 问题答案: 经过研究,问题不在于,而是(syscall)已在Docker
问题内容: 通常,docker容器使用 root 用户运行。我想使用其他用户,使用docker的USER指令没问题。但是该用户应该能够在容器内使用 sudo 。该命令丢失。 这是用于此目的的简单Dockerfile: 运行此容器,我以用户’docker’登录。当我尝试使用sudo时,找不到命令。所以我尝试使用以下方法在Dockerfile中安装 sudo 软件包 这导致 无法找到包sudo 问题答
问题内容: 似乎在容器中没有“ acl”的情况下挂载了文件系统,因此“ setfacl”将不起作用。而且它也不会让我重新安装它,甚至无法运行’df -h’。 我需要setfacl,因为我以root身份拥有我网站上的所有文件,并且授予Web服务器用户仅对几个目录(如缓存,日志等)的写权限。 我能做什么? 问题答案: 好消息是Docker支持ACL。 在早期版本中,Docker使用了一个不支持它们的名
通常,docker容器使用用户root运行。我想使用一个不同的用户,这是没有问题的使用Docker的用户指令。但该用户应该能够在容器内使用sudo。缺少此命令。 下面是一个用于此目的的简单Dockerfile: 运行这个容器时,我使用用户'docker'登录。当我尝试使用sudo时,找不到该命令。所以我尝试在我的Dockerfile中安装sudo包,使用 这将导致无法定位包sudo