Возможно ли добавить отсутствующий файл для монтирования тома при запуске docker контейнера? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть docker образ, и есть каталог ' A ', который монтируется в каталог хоста ' hostA '. В каталоге **hostA** есть файл file0 . Когда я строю образ docker, в директории A появляется файл file1 . Для большей ясности я покажу их следующим образом:

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

Когда я запускаю контейнер docker с изображением docker. Поскольку dir A монтируется на хосте dir **hostA** и hostA существовал при запуске контейнера, file1 в A не появится хотя он встроен в образ docker. Вместо этого file0 будет доступно в dir A , поскольку оно находится в hostA

Мой вопрос заключается в том, существует ли подход (либо во время построения docker image или запуск контейнера docker), сделайте файл1 также доступным в dir A (и в host dir hostA ). Это означает, что после запуска контейнера это будет

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

Заранее спасибо.

1 Ответ

1 голос
/ 25 марта 2020

Нет, не настолько, насколько я знаю. Так как Docker томовые монтирования работают так же, как обычные unix монтирования, вы не увидите файл в вашем Docker контейнере. Обычно вы разделяете те каталоги, которые будут меняться в течение срока службы вашего контейнера (например, ваш исходный код во время локальной разработки), и те файлы, которые не изменяются (например, node_modules при работе с JavaScript.

. две ваши идеи, которые приближаются к вашему желаемому решению и могут работать для вас.

Монтирование в другой каталог

Вы можете разделить каталог контейнера A на AA и AB . 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

Монтирование одного файла

В качестве другой альтернативы, вы можете монтировать один файл. Это правильное решение, если вам нужно монтировать только пару файлов (например, конфигурации). ) в ваш контейнер.

Docker:

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

docker -составьте:

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

Тем не менее, фи Файл из вашего контейнера file1 не будет доступен на вашем хост-компьютере.

В этом случае вы также можете установить подключенный файл только для чтения.

hostA/file0:/A/file0:ro

Надеюсь, это поможет.

...