【问题标题】:Docker : How to avoid Operation not permitted in Docker Container?Docker:如何避免 Docker 容器中不允许的操作?
【发布时间】: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

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

不允许操作

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

【问题讨论】:

    标签: docker permissions suse


    【解决方案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 解决了这个问题。
    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多