2017-03-23 267 views
1

我有一些運行的命令,用於在Ubuntu 14.04上安裝Cuda支持。爲了做到這一點,我運行下面的命令,這是一系列組合命令:Docker命令成功運行容器,但在Dockerfile上失敗

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否認力重載的執行。

    invoke-rc.d:policy-rc.d拒絕執行start。

我想澄清一下 - 當我在容器上運行bash和遵循Dockerfile指令一步一步成功了,但如果我執行一樣奔跑在dockerfile命令,使用docker build失敗。

任何想法可能是什麼問題以及如何解決它?

我要指出,我在一些地方人們,請將以下命令添加到他們的dockerfile看到:

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

沒有什麼更優雅?在運行docker builddocker run -it時不是關於不同的權限嗎?

回答

-1
RUN \ 
apt-get update -qq && \ 
apt-get install -y net-tools --no-install-recommends --allow-unauthenticated && \ 
apt-get clean autoclean && \ 
apt-get autoremove -y && \ 
rm -rf /var/lib/apt /var/lib/dpkg /var/lib/cache /var/lib/log 

只需更換上面的命令你的軟件名稱將與docker build 謝謝合作!

+0

該命令將如何解決'policy-rc.d'問題。你需要解釋你的答案,而不僅僅是粘貼 –

0

Here是一個很好的帖子,它試圖根源導致您面臨的問題。

較短的方式

  1. RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d應該解決您的問題 或

  2. 如果不解決問題,嘗試用privileged選項運行的泊塢窗容器。與此類似,docker run --privileged -d -ti DOCKER_IMAGE:TAG

理想情況下,我不會與privileged選項,除非它是一個測試臺容器建議運行容器。運行具有特權的Docker容器的原因爲容器提供了所有功能,並且還提升了所有強制實施的限制。換句話說,容器可以做主機可以做的幾乎所有事情。但這不是一個好的做法。這違背了碼頭工從主機隔離的目的。

完成此操作的理想方法是根據您想要實現的Docker容器的set capabilities。谷歌搜索這應該幫助你爲你的碼頭集裝箱提供適當的capability

+1

不建議用'--privileged'模式運行docker。 Docker意味着與主機隔離。 –

+0

我同意你@chintanthakar。可能不是使用'--priviledged'運行的最佳方式和推薦方式。我認爲最好的方法是根據你正在嘗試做的事情在容器內設置功能 –

相關問題