![](/img/trans.png)
[英]Copy file from container to host using Dockerfile or Docker-compose
[英]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.