docker - Docker命令在正在运行的容器上成功,但在Dockerfile上失败

标签 docker dockerfile docker-build

我有运行的命令,用于在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执行此操作时,它会遇到很多运行时错误,例如:

    invoke-rc.d:policy-rc.d拒绝执行强制重新加载。

    invoke-rc.d:policy-rc.d拒绝执行启动。

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

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

    我想指出,我在某些地方看到有人在其dockerfile中添加以下命令:
    RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
    

    没有什么比这更优雅了?运行docker builddocker run -it时是否有不同的权限?

    最佳答案

    Here是一个很好的帖子,它试图找出导致您面临的问题的根本原因。

    较短的:

  • RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d应该可以解决您的问题
  • 如果这不能解决问题,请尝试使用privileged选项运行docker容器。像这样docker run --privileged -d -ti DOCKER_IMAGE:TAG

  • 理想情况下,我不建议运行带有privileged选项的容器,除非它是一个测试床容器。运行具有特权的Docker容器的原因是该容器具有所有功能,并且还可以消除所有实现的限制。换句话说,容器可以完成主机可以做的几乎所有事情。但这不是一个好习惯。这违反了将docker与主机隔离的目的。

    理想的方法是根据您要实现的目标,对docker容器的set capabilities进行编码。谷歌搜索应该可以帮助您为docker容器提供适当的capability

    关于docker - Docker命令在正在运行的容器上成功,但在Dockerfile上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971744/

    相关文章:

    mongodb - 在 Docker 容器中保护 Mongo

    amazon-web-services - 使用 Docker on AWS 进行 POST 的 Flask 应用程序中的奇怪行为

    json - 复制 package.json - Dockerfile

    docker - Docker更改现有镜像

    docker - 避免在每个Docker构建中重新安装软件包

    ios - 从一个 Bash 脚本运行多个 Docker 镜像

    jenkins - 在 Docker 插件中构建 Jenkins 时安装失败

    docker - 构建参数未解决

    bash - 从脚本中找不到 docker-compose

    java - 找不到 docker 文件