Я хотел бы создать сервис, сохраняя при этом файловую структуру моего проекта. Но у Docker, похоже, есть проблемы с путями вне контекста сборки. Я создаю пакет и хотел бы хранить все материалы, связанные с Docker, в папке в корне проекта. Но я не могу найти способ сослаться на файлы проекта с docker-compose и Dockerfile. При создании контейнеров файлы из проекта необходимо скопировать.
Вот моя текущая структура проекта:
root/
docker/
docker-compose.yml
Dockerfile
docker_resource.txt
config
src/
project-files.whatever
root-files.txt
Теперь, если я $cd docker и $docker-compose up, есть две возможности, которые я пробовал. Либо мой Dockerfile копирует файлы с помощью COPY .. /path/in/container, либо в файле компоновки есть инструкции по сборке, например:
x-build: &my-build
context: ..
dockerfile: docker/Dockerfile
Первый подход не работает. Очевидно, Dockerfile не может ссылаться ни на что вне контекста сборки. Второй подход работает, но только после того, как я отредактирую команду копирования с docker_resource.txt на docker/docker_resource.txt. В идеале я хотел бы сохранить возможность docker build из ./dockerи сохранять чистоту, не беспокоясь о контексте компоновки в Dockerfile. Это возможно?
Как минимум, мне нужен способ иметь файлы, связанные с докером, в произвольной папке и иметь возможность указывать контекст сборки в файле компоновки без дополнительных изменений.


Вам нужно относиться к src/project-files.whatever как к самодостаточной минимальной сборке. Я бы поместил Dockerfile внутрь src. Его следует рассматривать как часть проекта, и он должен быть специфичным для него. Однако вам все равно нужно будет отредактировать команду копирования.
root/
docker/
docker-compose.yml
docker_resource.txt
config
src/
project-files.whatever
Dockerfile
root-files.txt
Вы все равно хотите разделить композицию, Dockerfile и ресурсы. В зависимости от того, что находится внутри docker_resource, вы можете переместить его в src. Думайте об образе как о самой программе без каких-либо настроек. Я предлагаю поместить материалы ресурсов/конфигурации в том, чтобы вам не приходилось перестраивать с нуля при каждом изменении.
Другой способ сделать это — поместить Dockerfile на один уровень выше и разрешить вашему корню быть контекстом сборки. В этом случае ваша структура будет примерно такой:
/root
Dockerfile
docker-compose.yml
docker_resource.txt
config
src/
project-files.whatever
root-Files/
root-files.txt
Не уверен, что тебе это нравится.
Не нравится, но это мало помогает. Несмотря ни на что, спасибо за ответ! Я рассмотрю первый изложенный вами подход.