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
选项。 (像这样为配置更改停止和重新创建容器是非常常规的。)
我有一个运行 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
选项。 (像这样为配置更改停止和重新创建容器是非常常规的。)