2016-02-23 84 views
0

我爲我的開發環境使用了docker:我有一個開發圖像,並將我的源文件裝入爲一個卷。如何從另一個容器啓動兄弟容器卷?

但是之後我想在持續集成服務器(gitlab ci)上做同樣的事情,我仔細閱讀docker doc對https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/的引用,但將docker的unix套接字綁定到docker客戶端容器的解決方案使得它。所以基本上我的問題是你將如何解決這個問題(鑑於我在碼頭的ci服務器/亞軍):我需要從容器(gitlab亞軍)運行以下命令。

$ git clone ... my-sources && cd my-sources 
$ docker run my-dev-image -v $PWD:$PWD -w $PWD gcc main.c 

因爲,很顯然,容量從碼頭工人的「原生」的主機所,而不是當前的容器。

回答

0

確保您的CI服務器以卷啓動(例如docker run --name gitlabci -v /src gitlabci …),然後在啓動其他容器時,使用docker run --volumes-from gitlabci …啓動它們。這樣,/src也將在這些容器中可用,並且無論您放入此目錄(來自CI服務器)都將在其他容器中提供。

+1

工作,所以你不放棄說「使用DIND」 :-P?主要缺點是這個解決方案在CI環境下不再透明:我需要更改'docker run'命令,並添加'--volumes-ci-server'。在使用'dind'或本地CI服務器(即docker外部)時,可以使CI服務器下的命令具有100%的透明性/可移植性。 –

0

我已經解決了這個問題,確保主機和CI容器上的構建路徑相同。例如 - 帶有-v /home/jenkins:/home/jenkins的起始容器。通過這種方式,我們將卷從主機安裝到CI容器。您可以更改爲您喜歡的任何目錄,只要確保jenkins用戶的家被設置爲該目錄即可。

注:我使用的是詹金斯作爲例子,但任何CI將與同樣的原則

相關問題