2017-03-17 105 views
0

我有一個關於Docker中整個數據量過程的問題。基本上,這裏有兩個Dockerfiles及其各自的運行命令:如何在容器中將容器從容器安裝到主機?

Dockerfile 1 -

# Transmission over Debian 
# 
# Version 2.92 

FROM debian:testing 

RUN apt-get update \ 
    && apt-get -y install nano \ 
    && apt-get -y install transmission-daemon transmission-common transmission-cli \ 
    && mkdir -p /transmission/config /transmission/watch /transmission/download 

ENTRYPOINT ["transmission-daemon", "--foreground"] 
CMD ["--config-dir", "/transmission/config", "--watch-dir", "/transmission/watch", "--download-dir", "/transmission/download", "--allowed", "*", "--no-blocklist", "--no-auth", "--no-dht", "--no-lpd", "--encryption-preferred"] 

命令1 -

docker run --name transmission -d -p 9091:9091 -v C:\path\to\config:/transmission/config -v C:\path\to\watch:/transmission/watch -v C:\path\to\download:/transmission/download transmission 

Dockerfile 2 -

# Nginx over Debian 
# 
# Version 1.10.3 

FROM debian:testing 

RUN apt-get update \ 
    && apt-get -y install nano \ 
    && apt-get -y install nginx 

EXPOSE 80 443 

CMD ["nginx", "-g", "daemon off;"] 

命令2 -

docker run --name nginx -d -p 80:80 -v C:\path\to\config:/etc/nginx -v C:\path\to\html:/var/www/html nginx 

於是,奇怪的是,第一dockerfile和指揮的作品如預期。 docker守護程序將容器中的目錄掛載到主機。所以,我可以根據需要編輯配置文件,並在重啓時將它們保存到容器中。

但是,至於第二個dockerfile和命令它似乎並沒有工作。我知道如果你去了Docker卷的文檔,它說卷的安裝只能用於從主機到容器的單向傳輸,但是傳輸容器如何按預期工作,而Nginx容器不是這樣?

,P:的S - 我運行的Microsoft Windows 10臨建14393作爲我的主機和版本17.03.0-CE-WIN1(10300)頻道:公測我的泊塢版本。

編輯 - 只是爲了澄清。我試圖從Nginx容器內的文件獲取文件到主機。第一個容器(傳輸)通過使用數據量在這方面起作用。但是,對於第二個容器(Nginx),它不希望將容器內安裝的目錄中的文件複製到主機。其他一切都在工作,但它確實成功開始。

+0

什麼「不起作用」?容器無法啓動?本地文件是否出現在已安裝的目錄中,但未更新?掛載的目錄中是否有任何內容? – Matt

+0

@Matt我試圖從Nginx容器內獲取文件到主機。第一個容器(傳輸)通過使用數據量在這方面起作用。但是,對於第二個容器(Nginx),它不希望將容器內安裝的目錄中的文件複製到主機。其他一切都在工作,但它確實成功開始。 – Cat

+0

請使用這些信息更新您的問題。 –

回答

2

Host volumes不要從容器>主機複製數據。主機卷安裝在容器/映像中的頂部,因此它們可以有效地替換容器中的內容與主機上的內容。

A standard or "named" volume將現有數據從容器映像複製到新卷中。這些卷被推出容器與VOLUME命令在它的Dockerfile或泊塢窗命令創建

docker run -v myvolume:/var/whatever myimage 

默認情況下,這是存儲在一個「局部」量數據,「本地」作爲泊塢主機上。你的情況是在運行Docker的虛擬機上而不是你的Windows主機上,因此你可能無法輕鬆訪問它。

你可能會錯誤的傳輸自動生成文件在一個空白目錄中的副本?

如果你真的需要保留VM主機>容器映射,那麼你可能需要將數據手動複製:

docker create --name nginxcopy nginx 
docker cp nginxcopy:/etc/nginx C:\path\to\config 
docker cp nginxcopy:/var/www/html C:\path\to\html 
docker rm nginxcopy 

然後你就可以將填充主目錄映射到容器中,他們將有圖像附帶的默認數據。

+0

你能解釋一下標準卷嗎?你是什​​麼意思,「將容器映像中的現有數據複製到新卷中?」 – Cat

+0

我已經擴展了該部分。基本上,當docker爲Dockerfile'VOLUME'或'docker run -v volume:/ wherever'創建新卷時,它將使用容器映像('/ wherever')中目標裝入點中已存在的任何內容填充卷。這是您尋找的行爲,但您無法在主機上指定位置,並且它未映射到Windows。 – Matt

+0

好的,這樣做更有意義,但我仍然對一件事感到困惑。傳輸容器如何將文件複製到主機上的目錄中,但Nginx容器沒有? – Cat