簡體   English   中英

當docker容器啟動時,是否可以將丟失的文件添加到掛載卷?

[英]Is that possible adding the missing file to mount volume when docker container start?

我有 docker 映像,並且有一個目錄“ A ”,它安裝在主機目錄“ hostA ”中。 在目錄**hostA** ,有一個文件file0 當我構建 docker 鏡像時,在A 目錄中,有一個文件file1 為了更清楚,我將它們顯示如下:

In host: 
hostA:
   - file0
In docker container: 
A:
   - file1

當我使用 docker 鏡像啟動 docker 容器時。 由於目錄A掛載在主機目錄**hostA**並且容器啟動時hostA 已存在,因此A 中file1盡管已構建到 docker 映像中,但不會出現。 相反, file0將在 dir A 中可用,因為它在hostA 中

我的問題是是否有一種方法(在構建 docker 映像期間或啟動 docker 容器期間),使 file1 在 dir A (以及主機 dir hostA )中也可用。 這意味着容器啟動后,它將是

In host: 
hostA:
   - file0
   - file1
In docker container: 
A:
   - file0
   - file1

提前致謝。

不,據我所知沒有。 由於 Docker 卷掛載的工作方式與常規 unix 掛載相同,因此您不會在 Docker 容器中看到該文件。 通常,您將在容器的生命周期內會更改的目錄(例如本地開發期間的源代碼)和不會更改的文件(例如,使用 JavaScript 時的 node_modules)分開。

我可以為您概述兩個接近您想要的解決方案並且可能對您有用的想法。

掛載到不同的目錄

您可以將容器目錄A拆分為AAAB AA包含在構建期間添加的文件,而AB包含您在容器中安裝的文件。 然后,您可以使用相對路徑(如../AB/some_file從容器中的文件中引用掛載的文件。

# /A/AA/file1.js
require '../AB/file0';
In host: 
hostA:
   - file0
In docker container: 
A:
  AA:
    - file1
  AB: # mounted
    - file0

掛載單個文件

作為另一種選擇,您可以掛載單個文件。 如果您只需要將幾個文件(如配置)掛載到容器中,那么這是一個有效的解決方案。

碼頭工人:

-v "PWD"/hostA/file0:/A/file0

碼頭工人組成:

somes_service:
  volumes:
    - hostA/file0:/A/file0

盡管如此,您的容器file1將無法在您的主機上使用。

在這種情況下,您也可以將掛載的文件設置為只讀。

hostA/file0:/A/file0:ro

希望能幫助到你。

暫無
暫無

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

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