![](/img/trans.png)
[英]How can I use a bind mount in docker-compose and still preserve node_modules?
[英]With Docker, how can I bind mount but also preserve container files?
我想使用 Docker 容器來運行使用本地文件的實用程序(特別是 Terraform)。 為了快速迭代代碼(例如my_stuff.tf
),我想綁定掛載我的工作目錄。 但是,我想考慮一些相對穩定和靜態的東西,例如插件。 基本上,我希望通過三種方式來處理事情:
.terraform/
是穩定的東西,應該存在於容器中而不是我的主機目錄中,但即使在安裝后也需要保留。my_stuff.tf
存在於容器中(因為init
需要它)和主機目錄中(因為我想編輯它)。 我希望我的主機目錄版本覆蓋容器版本。terraform.tfstate
可能在任何地方都不存在,但會在運行期間生成。 我希望它在它確實存在后立即保留在我的主機目錄中。 (我猜是第 4 個類別,比如README.md
,我不在乎它是否存在)
就我而言,TF 期望配置插件的.terraform/
和terraform.tfstate
(我想用綁定掛載捕獲的輸出之一)位於同一目錄中,因此我不能只為容器使用不同的目錄- 內部的東西和綁定安裝的東西。
# Dockerfile
FROM plugin_source AS plugins
FROM terraform_base
COPY --from=plugins terraform-provider-X /bin/
COPY my_stuff.tf /app/
WORKDIR /app
RUN /bin/terraform init
我的運行命令:
docker run --rm -i -t --mount source=$PWD,target=/app,type=bind my_terraform <some-tf-command>
如https://docs.docker.com/storage/bind-mounts/#mount-into-a-non-empty-directory- 中所述,是否有一種巧妙的方法可以使綁定安裝在第一次初始化時表現出命名卷的行為在容器上? 目前,似乎我可能需要編寫一個小入口點腳本,將穩定的內容符號鏈接到我的工作目錄中。
我曾經使用在我的計算機上運行的舊開發 Weblogic 容器來執行此操作:
docker cp
本地磁盤感興趣的目錄Stop
並kill
容器這使我能夠從原始容器中重新開始使用文件,並保留服務器內的所有更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.