我有一个运行的 docker 映像tomcat。每当我部署一个分离的容器并使用 登录到该容器时docker exec,我通常会默认以 root 身份登录。但是,每当我尝试诸如 之类的命令时mount/umount,容器 shell 都会返回一个错误:must be superuser
这是什么错误以及如何修复它?
即使作为 root,您在 Docker 容器内可以执行的操作也是有限的。文档中的“运行时权限和 Linux 功能”docker run对此进行了一些讨论。如果没有额外的配置,您无法在容器中执行的操作之一是mount(8)附加文件系统。
但总的来说,进入容器并开始进行更改并不是一个好的 Docker 实践docker exec。您通常希望进行设置,以便可以运行单个docker run(或docker-compose up)命令,并且所有内容都会自动为您配置。当您开始查看重新启动策略或 Docker Swarm 或 Kubernetes 等集群环境等内容时,这一点尤其重要:当您拥有容器的多个副本(可能位于不同的主机上,并且可能在不同的主机上重新启动)时,启动后手动调整内容效果不佳。他们自己的。
Docker 有一些内置的支持来管理容器中的文件系统,最好使用它:
如果您尝试使用mount --bind主机目录进行发布注销等操作,Docker 有自己的绑定挂载系统,因此您可以
docker run -v $PWD/host/directory/path:/container/path ...
Run Code Online (Sandbox Code Playgroud)
如果您尝试挂载物理设备用于外部存储,则可以将其挂载(8) 到主机上,然后将其绑定挂载到容器中,如上所述。
或者,您可以手动配置 Docker命名卷来挂载物理设备。该docker volume create命令采用扩展选项,使您可以手动指定大多数安装选项,因此您可以
docker volume create disk --driver local --opt device=/dev/sdX
docker run -v disk:/container/path ...
Run Code Online (Sandbox Code Playgroud)
如果您需要卸载卷,请停止容器,将其删除,然后使用更少的-v选项重新运行它。(像这样停止并重新创建容器以进行配置更改是非常常规的。)
| 归档时间: |
|
| 查看次数: |
2443 次 |
| 最近记录: |