簡體   English   中英

將卷內的文件 cp 到容器中的另一個位置 - 只需使用卷,添加 Dockerfile? 或者我可以在 compose.yml 中完成嗎?

[英]cp a file from within a volume to another location in the container - just use a volume, add Dockerfile? Or can I do it within compose.yml?

我的工作目錄中有一個 docker-compose 文件。 我沒有 Dockerfile(但是,我不確定我是否需要一個?)。 這是我的 docker-compose 文件:

version: "3.5"
services:
  ide-rstudio:
    image: rocker/verse:latest
    ports:
      - 8787:8787
      - 3838:3838
    environment:
      PASSWORD: test
      ROOT: "TRUE"
      ADD: "shiny"
    volumes:
      - ${PROJECTS_DIR}/Zen:/home/rstudio/Projects

當我運行它時,一個新容器按預期運行。 在卷中,我有一個文件/Zen/ide-rstudio/rstudio-prefs.json 我想將rstudio-prefs.json添加到我的容器中/home/rstudio/.config/rstudio/rstudio-prefs.json 我已經可以通過使用卷並將此行添加到我的 docker-compose 卷中來做到這一點:

volumes:
  - ${PROJECTS_DIR}/Zen:/home/rstudio/Projects
  - ${PROJECTS_DIR}/Zen/ide-rstudio/rstudio-prefs.json:/home/rstudio/.config/rstudio/rstudio-prefs.json

我的問題是,如果在第一行${PROJECTS_DIR}/Zen:/home/rstudio/Projects添加卷后,文件rstudio-prefs.json已經存在於/home/rstudio/Projects/ide-rstudio/rstudio-prefs.json的容器中/home/rstudio/Projects/ide-rstudio/rstudio-prefs.json 所以,我真的只想在容器啟動后運行以下 shell 命令cp /home/rstudio/Projects/ide-rstudio/rstudio-prefs.json /home/rstudio/.config/rstudio/rstudio-prefs.json .

是否可以使用 docker-compose 在服務中運行 shell 命令? 或者,我現在必須創建一個 Dockerfile 嗎?

你應該使用你展示的volumes:方法。 這會自動工作,不需要任何用戶干預。 在容器中擁有該文件的第二個副本並沒有什么壞處,尤其是一個小的配置文件。

原則上,您可以在容器啟動后運行docker-compose exec 這樣做有幾個問題。 如果容器的主進程讀取了配置文件,那么在您有機會像這樣運行調試命令之前就會發生這種情況。 每次重新啟動容器時,您都需要記住重復此命令。 如果你在像 Kubernetes 這樣的集群環境中結束,你需要記住在容器的每個副本上都這樣做,並安排它在集群在你不知情的情況下重新啟動容器時發生(例如,如果一個節點出現故障)。

如果您希望這作為 shell 命令可靠地發生,那么您需要編寫一個入口點包裝腳本。 這將運行您需要的任何首次設置,然后exec圖像的原始入口點。 使用自定義 Dockerfile 可以更輕松地重復執行此操作,並且需要了解映像的詳細設置。

單行volumes:第二次注入同一個文件要容易得多。

暫無
暫無

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

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