Docker 一直说必须是超级用户

Docker keeps saying must be a superuser

我有一个运行 tomcat 的 docker 图像。每当我部署一个分离的容器并使用 docker exec 登录到该容器时,我通常默认以 root 身份登录。但是,每当我尝试 mount/umount 之类的命令时,容器 shell 不断返回一条错误消息 must be superuser

这是什么错误,我该如何解决?

即使是 root,您在 Docker 容器中可以做的事情也是有限的。 "Runtime privilege and Linux capabilities" in the docker run documentation 下对此进行了一些讨论。在没有额外配置的情况下你不能在容器中做的事情是 mount(8) 额外的文件系统。

不过,一般来说,Docker 将 docker exec 放入容器并开始进行更改并不好。您通常希望进行设置,以便您可以 运行 单个 docker run(或 docker-compose up)命令,一切都会自动为您配置。当您开始查看重启策略或 Docker Swarm 或 Kubernetes 等集群环境时,这一点尤其重要:当您有一个容器的多个副本(可能位于不同的主机上)时,启动后手动调整内容效果不佳,可能会自行重启。

Docker 对管理容器中的文件系统有一些内置支持,最好使用它:

  • 如果您尝试 mount --bind 主机目录用于发布日志之类的内容,Docker 有自己的 bind mount 系统,因此您可以

    docker run -v $PWD/host/directory/path:/container/path ...
    
  • 如果您尝试挂载外部存储的物理设备,您可以 挂载(8) 它在主机上,然后绑定挂载进入容器如上。

  • 或者,您可以手动配置 Docker named volume to mount a physical device. The docker volume create 命令采用扩展选项,让您手动指定大多数挂载选项,因此您可以

    docker volume create disk --driver local --opt device=/dev/sdX
    docker run -v disk:/container/path ...
    
  • 如果您需要卸载一个卷,停止容器,删除它,然后重新运行它少一个-v选项。 (像这样为配置更改停止和重新创建容器是非常常规的。)