Dockerfile против docker-compose VOLUME

Этот эксперимент пытается создать контейнер, используя этот файл Docker:

FROM lambdalinux/baseimage-amzn:2016.09-000
COPY ./bundle /opt/bundle/
VOLUME /bundle

Затем внутри контейнера создайте /opt/bundle/file.txt и вставьте в него некоторый текст. Но этот файл не отображался в каталоге пакета на хосте, как я ожидал после чтения Должен ли я включать свой код с COPY/ADD или томом последний абзац:

Могут быть случаи, когда вы хотите использовать оба. Вы можете иметь изображение, включающее код, используя COPY, и использовать том в файле Compose для включения кода с хоста во время разработки. Громкость переопределяет содержимое каталога изображения.

Не работает ли Dockerfile VOLUME так же, как docker-compose.yml VOLUME? Если да, как это можно сделать, чтобы изменения в каталоге хоста отражались внутри каталога контейнера в этом случае?

Я также создал файл на хосте bundle/play.txt, но не отображался внутри контейнера /opt/bundle/...

Ответ 1

A VOLUME инструкция в файле docker создает точку монтирования, но изначально только сопоставляет ее с внутренним каталогом данных Docker.

Чтобы отобразить том в файловую систему хоста, вам нужно указать, какой путь на хосте должен быть сопоставлен с томом. Вы можете сделать это в файле скрепления докеров, используя параметр volumes. (Примечание: вы можете создавать тома, используя docker-compose, не объявляя их в файле Docker.)

Обратите внимание, что при сопоставлении каталога с хостом в контейнер содержимое каталога на хосте заменит содержимое в контейнере, а не наоборот.