1

我运行了一些命令,用于在 Ubuntu 14.04 上安装 Cuda 支持。为了做到这一点,我运行以下命令,这是一系列组合命令:

apt-get install -y software-properties-common && add-apt-repository -y ppa:graphics-drivers/ppa && apt-get --purge remove "nvidia*" && apt-get --purge remove "cuda*" && cd Downloads && dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb && apt-get -y update && apt-get -y upgrade && apt-get install -y cuda
  • 当我在正在运行的容器上执行此操作时,即我的 Dockerfile 仅包含命令FROM ubuntu:14.04,然后我使用docker run -it <my new image name> bash它并成功!

  • 当我从 Dockerfile 执行此操作时,它会出现很多运行时错误,例如:

    调用-rc.d:策略-rc.d 拒绝执行强制重新加载。

    调用-rc.d:策略-rc.d 拒绝执行启动。

我想澄清一下 - 当我在容器上运行 bash 并逐步遵循 Dockerfile 命令时,它会成功,但如果我在 dockerfile 中执行与 RUN 命令相同的命令,使用docker build.

知道可能是什么问题以及如何解决它吗?

我想指出,我在某些地方看到人们将以下命令添加到他们的 dockerfile 中:

RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d

有什么更优雅的?运行时不是关于不同的权限docker buildvsdocker run -it吗?

4

1 回答 1

1

是一个很好的帖子,它试图从根本上导致您面临的问题。

更短的方式

  1. RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d应该解决您的问题或

  2. 如果这不能解决问题,请尝试使用privileged选项运行 docker 容器。像这样,docker run --privileged -d -ti DOCKER_IMAGE:TAG

理想情况下,我不建议运行带有privileged选项的容器,除非它是一个测试台容器。运行具有特权的 docker 容器的原因为容器提供了所有功能,并且还解除了所有强制执行的限制。换句话说,容器几乎可以做主机可以做的所有事情。但这不是一个好习惯。这违背了 docker 与主机隔离的目的。

执行此操作的理想方法是set capabilities根据您想要实现的目标创建 docker 容器。谷歌搜索这应该可以帮助您提供适合capability您的 docker 容器。

于 2018-02-14T08:38:08.007 回答