Я создал простой пример, в котором я пытаюсь выполнить простую задачу. Мне нужно смонтировать указанную папку c внутри моего контейнера в указанную папку c на хост-компьютере.
Docker-файл, который создает изображение, которое я использую в моем docker -компоненте, выглядит следующим образом:
FROM ubuntu:bionic
COPY ./file.txt /vol/file.txt
В этой папке на стороне контейнера я копирую файл с именем file.txt
и мне нужно это поведение на хост-компьютере:
- Если папка на хост-машине пуста или отсутствует или файл отсутствует, мне нужно скопировать в этот файл
file.txt
. - Если в папке хост-машины уже есть файл с таким именем, файл сохраняется и не переопределяется.
Это именно то, что происходит, когда volume
используется внутри docker -compose. Проблема в том, что вы не можете выбрать папку на хост-компьютере, но вы можете просто назначить тому имя и Docker создаст его внутри одной из его папок.
Вместо этого используйте mount point
позволяет выбрать папку на хост-компьютере, но здесь поведение отличается: даже если папка на хост-компьютере пуста или отсутствует, файл file.txt
удаляется в контейнере.
Практическим примером этого является распространенное приложение, распространяемое с docker. Я начинаю с образа do tnet и копирую в него свое приложение, которое запускается при загрузке контейнера. Внутри этого приложения у меня есть файл конфигурации, который мне нужно сохранить при обновлении образа, поэтому мне нужно скопировать его на хост-компьютер, и этот файл должен редактироваться пользователем, который использует хост-компьютер, поэтому он не может быть включен вложенная папка docker установки со случайным именем.
Есть способ добиться этого?