簡體   English   中英

從 docker 容器創建/觸摸主機上的文件

[英]Create/Touch a file on host from docker container

我想將一些配置文件壓縮成一個 tar 並將其保存在主機上的/root/路徑中。

目前我在容器內運行的代碼正在容器內創建 tar,然后將其復制到服務器。

有沒有一種方法可以直接從容器內部在主機上創建 tar。 一個帶有 touch 命令的簡單示例在這里也有幫助。

是的,你可以堆主機目錄,然后運行所需的命令,

下面將創建 tar 文件並退出。 從所需目錄運行以下命令。

.
└── config
    └── default.conf

創建焦油

docker run -it --rm --workdir=/app -v $PWD/:/app alpine sh -c "tar -czvf file.tar.gz config"

執行后的樹

├── config
│   └── default.conf
└── file.tar.gz

從容器到主機

docker run -it --rm --workdir=/app -v $PWD/:/app alpine sh -c "mkdir myfiles; cd myfiles; touch hello.txt; cd ..; tar -czvf file.tar.gz myfiles"
  • 它創建 myfiles/hello.txt 或者它也可以是一個現有目錄
  • 在主機掛載位置創建 tar

對於容器中的現有目錄

docker run -it --rm --workdir=/app -v $PWD/:/app alpine sh -c "cd parent_directory; tar -czvf file.tar.gz myfiles; cp parent_directory/file.tar.gz /app"

將 tar 文件寫入主機

 docker run -it --rm  alpine sh -c "cd path_to_tar ; tar -czf - ." >filename.tar.gz

您需要安裝一個卷 在這種情況下,在您的docker-compose.yml中,使用主機上的絕對路徑和容器中的相應路徑指定卷,例如:

version: "3"
services:
  my-service:
    build:
      context: ../
      dockerfile: Dockerfile
    image: my-service
    volumes:
      - "/root/:/path/to/container/dist/"

然后,在您的容器中,只需將文件寫入/path/to/container/dist/目錄,方法如下:

$ cp my_config.tar /path/to/container/dist/

請注意,此 output 路徑可以在任何地方並具有任何名稱。 確保它是一個特定於主機和容器之間的“隧道”的目錄,否則可能會寫入不需要的文件,或者您可能會覆蓋主機/root/中存在的其他文件。

暫無
暫無

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

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