簡體   English   中英

Docker 將文件從 dockerfile 復制到主機

[英]Docker copy file to host from within dockerfile

我正在編寫一個Dockerfile來構建一個應用程序。 我知道您可以手動將文件從容器中復制出來

docker cp <containerId>:/file/path/within/container /host/path/target

(請參閱將文件從 Docker 容器復制到主機),但我只想運行

docker build

並讓它轉儲由我的Dockerfile創建的構建工件到我的主機文件系統的某個地方。

是否有我可以在 Dockerfile 中使用的命令從容器中復制到主機中? 就像COPY的反面一樣?

根據 Docker 文檔,添加了 API 版本 1.40

自定義構建輸出

這適用於您想要的:

默認情況下,根據構建結果創建本地容器映像。 --output(或 -o)標志允許您覆蓋此行為,並指定自定義導出器。 例如,自定義導出器允許您將構建工件導出為本地文件系統上的文件,而不是 Docker 映像,這對於生成本地二進制文件、代碼生成等非常有用。

例如

$ docker build --output type=tar,dest=out.tar .

使用多階段Dockerfile

FROM golang AS build-stage
RUN go get -u github.com/LK4D4/vndr

FROM scratch AS export-stage
COPY --from=build-stage /go/bin/vndr /

--output 選項從目標階段導出所有文件。 僅導出特定文件的常見模式是進行多階段構建,並使用 COPY --from 將所需文件復制到新的臨時階段。

添加到@Marakai 優秀答案,必須設置環境變量 DOCKER_BUILDKIT=1。 所以命令是:

$ DOCKER_BUILDKIT=1  docker build --output type=tar,dest=out.tar .

或者可以分成兩個命令:

$ export DOCKER_BUILDKIT=1
$ docker build --output type=tar,dest=out.tar .  # to gen into a tar file

或者在不形成 tar 文件的情況下保存文件:

$ mkdir out
$ docker build  --output out .

文件將被復制到目錄out。

也許這個命令是你正在尋找的

docker run -v ~/data:/var/logs <image>

-v ~/data:/var/logs創建一個綁定掛載卷,將容器中的/var/logs目錄鏈接到主機上的~/data vdirectory。 Docker 使用 : 將主機路徑與容器路徑分開。

我推薦關於如何在 Docker 容器之間共享數據的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM