Docker问题:删除绑定挂载的卷

4

我在网上找不到任何关于这个简单错误的帮助,所以我需要一些帮助。我正在使用服务器在容器中运行docker镜像,但我输错了命令,给自己带来了麻烦。我运行了以下命令:

docker run --rm -v typo:location docker_name

由于我在挂载目录时打错了目录,它在主机上创建了一个目录,当容器结束时,该目录仍然存在。我尝试删除它,但只得到错误提示。

rm -rf typo/
rm: cannot remove 'typo': Permission denied

我现在知道我应该使用--mount而不是-v来确保安全,但已经造成了损害。如何在没有访问创建它的容器的情况下删除此目录?很抱歉,我的Docker知识非常有限。我主要只学会了使用特定的镜像,并通过进行大量的谷歌搜索来完成其余部分。

你应该能够使用 sudo 获取 root 权限。你展示的语法 docker run -v name:/container/path 创建了一个 Docker _命名卷_,但它在主机上没有可访问的位置;docker volume rm typo 可以删除它。 - David Maze
@DavidMaze,我没有sudo权限,所以这个选项对我来说不可行。命令docker volume rm typo返回错误Error: No such volume: typo。从这里开始,我不知道该怎么继续了。 - Josh B.
1个回答

5

Docker安全的第一条规则是,如果您可以运行任何docker命令,那么您可以获取对整个主机的不受限制的root访问权限。

因此,您可以通过运行一个容器,以root身份运行并绑定挂载父目录,可以删除相关目录来解决此问题:

docker run \
  --rm \
  -v "$PWD:/pwd" \
  busybox \
  rm -rf /pwd/typo

我没有sudo权限

你可以解决这个问题

docker run --rm -v /:/host busybox vi /host/etc/sudoers

这对许多方面都有影响。在多用户系统上,不要随意将用户添加到docker组,因为他们可以轻松获得root权限。小心发布主机的Docker套接字到容器中,因为容器可以控制主机;也许需要重新设计应用程序以避免需要它。绝对不要通过网络公开Docker套接字。


这正是我所需要的;绑定挂载并从Docker中删除已经起作用了。非常感谢! - Josh B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接