Docker:如何避免 Docker 容器中不允许的操作?

Posted

技术标签:

【中文标题】Docker:如何避免 Docker 容器中不允许的操作?【英文标题】:Docker : How to avoid Operation not permitted in Docker Container? 【发布时间】:2017-05-01 21:43:48 【问题描述】:

我通过支持所有必要的文件系统创建了一个 sles12 机器的 docker 映像,并创建了一个 tar 文件。为了创建 docker 映像,我运行以下命令 -

cat fullbackup.tar | docker import - sles_image

之后,我使用以下命令在容器中运行 docker 映像 -

docker run --net network1 -i -t sles_image /bin/bash

注意 - 我已经在这个 docker 容器中设置了网络(我想要的 IP 地址)。

现在在我的 docker 容器中,一些应用程序已经配置好了,因为这些应用程序在我创建这个 docker 映像的 sles12 机器上可用。这些自定义应用程序在内部运行一些内核低级命令,例如modprobe。

但是当我启动我的应用程序时,应用程序将正确启动。我正面临这个错误 -

不允许操作

我怎样才能给予正确的权限,这样它就不会给我这个错误?

【问题讨论】:

【参考方案1】:

Docker 的理念是:将您的应用程序拆分为微服务,并为每个微服务使用一个容器。

Docker 容器存储不是持久的。如果您删除容器,您的数据将会丢失。您需要使用 Docker 卷或绑定挂载来保存数据。

现在,如果您想反其道而行之,并将几个服务放入 Docker 容器中(不推荐),我建议至少使用 Dockerfile 从基础映像创建它.这些在 DockerHub(库)中可用的基础镜像针对容器化环境进行了优化,您可以按照自己认为适合该镜像的方式安装和配置服务。

【讨论】:

@Farhad-我不想使用集线器上可用的 docker 基础映像并在其中安装自定义软件。我想使用我现有的图像,因此仅提供用于此目的的解决方案。 我把它放在这里只是为了提高认识,以防我们可以帮助其他人。 @Farhad- 有什么方法可以提供 docker 卷并为现有的 docker 容器提供权限? docker 卷中的文件使用 linux 文件权限。试试这个:docker run -u root --net network1 -i -t sles_image /bin/bash 问题是你所说的,内核命令,我会在来自 docker hub 的基本映像中尝试这些命令,也许是 docker。如果它不是自定义应用程序,请查找它的 dockerized 版本,看看它们是如何工作的。【参考方案2】:

您可以尝试使用Runtime privilege and Linux capabilities 设置Docker 容器,使用

docker run --privileged

【讨论】:

确认直接使用主机网络接口工作。最初有ifconfig enp0s8 192.168.55.4; ifconfig: SIOCSIFADDR: Operation not permitted。运行 --privileged 解决了这个问题。

以上是关于Docker:如何避免 Docker 容器中不允许的操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免Docker容器启动脚本运行后自动退出

如何避免Docker容器启动脚本运行后自动退出

如何避免docker主机和docker容器同时访问串口?

如何构建Memcached Docker容器

如何避免使用 Visual Studio 和 docker 容器在 API 上出现连接被拒绝错误?

ps 命令在 docker 容器中不起作用