[英]How can I add a file to a volume in a Docker image, using values from the docker-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.