2013-03-28 94 views

回答

11

*更新 - 請參閱下面的答案。這不再是正確的答案*

您無法通過設計安裝它們,因爲Docker不能再保證可重複的執行環境。

但是,您可以:

1)導入主機的根文件系統,並從它創建一個新的形象:

tar -C/-c . | docker import - entend/custombase 

2)導入引導根文件系統,例如運行「debootstrap的結果」。 (請注意,這是怎麼了正式的「基地」的形象被創造了,所以你可能會更好只運行「搬運工拉基地」)

debootstrap precise ./bootstrap 
tar -C ./bootstrap -c . | docker import - entend/ubuntubase 

3)注入本地目錄中的內容放入容器中運行時它。

IMAGE=base; SRC=./stuff; DST=/tmp/stuff; CMD="echo hello world"; tar -C $src -c . | docker run $IMAGE -i /bin/sh -c "tar -C $DST -x; $CMD" 

這將運行從$ IMAGE容器,複製主機目錄$ SRC倒入容器目錄$ DST,然後運行命令$ CMD

這最後一個實例是通常用於運行構建之前插入的源代碼命令在容器內。

希望這會有所幫助!

+2

#3的語法似乎已經改變; '-i'標誌需要在圖像之前出現,否則docker run會嘗試找到名爲'-i'的圖像。 –

+0

當進行方法#3時,如何獲得'$ CMD'的輸出?這看起來像-i選項壓制來自'docker run'的輸出。 – Naveed

+2

作爲一個更新,現在通過docker run中的''-v''選項在docker中成爲一流的選項。更多信息如下。 – user2089674

5

只是爲了更新這個問題,Docker很快就可以實現這一點。

This pull request實際上已經實現了這個功能,並且很快就會合併爲主。

如果您安裝this fork,您可以立即使用它。

157

就像最後一次更新一樣,此功能現在在Docker中發佈(儘管API自從通過@imiric鏈接的請求後發生了更改)。

只需使用像

docker run -v /tmp:/root myImage 

一個命令,以便從主機安裝/tmp作爲圖像內/root

來源:https://docs.docker.com/engine/userguide/dockervolumes/

+2

問:對這些路徑中的任何文件所做的更改是否會同時起作用? –

+2

@AlixAxel是的,他們會。目錄和文件駐留在安裝到容器的主機上。您可以從兩側編輯文件,並在兩者中立即查看更改。我使用它將動態內容放入容器中,而不會讓它們膨脹。 – Vilsepi

+10

請注意,由於Docker使用從ramdisk運行的VirtualBox映像作爲主機,因此在OS-X(也可能是Windows)上這不起作用,因此該命令會在映像中的VB主機上掛載一個(空)文件夾。 –

4

IS可能在搬運工:

摩數據到應用程序容器

docker run -t -i -rm -volumes-from DATA -name client1 ubuntu bash 
4

TRICK FOR OSX和WINDOWS

2連續坐騎:我想這裏的許多帖子可能會使用兩個boot2docker,因爲你沒有看到任何我因爲你正在從boot2docker掛載一個目錄而不是你的主機。你基本上需要2個連續的坐騎:第一個從主機掛載目錄添加到系統和第二安裝從boot2docker新的目錄,您的容器是這樣的:

  1. 上boot2docker

    安裝本地系統
    sudo mount -t vboxsf hostfolder /boot2dockerfolder 
    
  2. 在Linux上安裝容器boot2docker文件

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename 
    

然後當你在容器文件夾裏面時,你會看到你的主文件夾的內容

相關問題