Это действительно возможно, если воспользоваться преимуществами настроек driver
и driver_opts
для такой конфигурации тома в docker-compose 3.2 +
На основе вашего примера вВ файловой системе Linux это может быть что-то вроде:
volumes:
apdata:
driver: local
driver_opts:
type: none
device: /home/$USER/data/app
o: bind
dbdata:
driver: local
driver_opts:
type: none
device: /home/$USER/data/web
o: bind
Конечно, вы должны убедиться, что целевые файлы уже существуют
mkdir /home/$USER/data/{app,web}
Как приятный побочный эффект этого решения,вы сможете по-прежнему составлять списки своих томов обычным способом:
docker volume ls
, и в то же время вы сможете получить прямой доступ ко всему общему контенту из контейнера впапки, которые вы привязываете к таким томам таким образом.
Обновление
Более простой способ сделать это (например, если вы просто хотите это для целей тестирования)) состоит в том, чтобы просто избавиться от раздела томов (в нижней части файла docker-compose) и вместо этого связать свои тома непосредственно в разделе томов каждого определения службы:
version: "3.7"
services:
app:
container_name: application
build:
context: ./
dockerfile: app.dockerfile
working_dir: /var/www
volumes:
- /home/$USER/mysite/logs:/var/log
web:
container_name: website
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes:
- /home/$USER/mysite/test:/var/www
ports:
- 8888:80
depends_on:
- app
Для систем Windows простозаменить полный рДля того, чтобы каталог хоста соответствовал вашей фактической структуре папок, например:
...
volumes:
- C:\mysite\logs:/var/log
Кстати: вам больше не нужно связывать контейнеры в вашем docker-compose, поскольку теперь они автоматически связываются с помощью Docker,поэтому все, что работает в вашем web
контейнере / службе, всегда сможет найти вашу app
службу по имени (как если бы они на самом деле были связаны )
Итак .. выможете удалить эту часть:
...
links:
- app
Добавление дополнительного примера здесь (чтобы соответствовать вашему последнему обновлению вопроса):
version: "3.7"
services:
app:
container_name: application
build:
context: ./
dockerfile: app.dockerfile
working_dir: /var/www
volumes:
- C:\log:/var/log
web:
container_name: website
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes:
- C:\test:/var/www
ports:
- 8888:80
depends_on:
- app
#-- end of file
Когда вы запустите еготаким образом, вы сможете перемещаться на вашем хост-компьютере по следующим путям: C:\log
& C:\temp
и все, что вы там скопируете, ваш контейнер будет автоматически иметь к нему доступ (но по соответствующим им отображенным путям).
Например, если вы скопируете обновленную версию своего веб-сайта (или даже если вы отредактируете ее непосредственно в этой папке C:\test
), ваш контейнер автоматически будет иметь такое же обновленное содержимое.
И каждый раз, когда ваше приложение создает новую запись в журнале (или файл), вы сможете получить к ней доступ непосредственно в этой папке C:\log
, которая действительно является той же самой папкой /var/log
в области действия вашего приложения (внутриего собственный контейнер)
Теперь, если вы хотите, чтобы оба содержимого (/var/log
приложения и /var/www
в Интернете) совместно использовали один и тот же каталог (и, таким образом, одни и те же файлы и папки внутри такихпути), затем просто используйте те же каталоги в левой части привязок тома