Разделяя файлы 2 docker-compose.yml
, как вы делали в своем вопросе, фактически создаются 2 разных тома; По этой причине вы не видите данные из сервиса web
внутри тома сервиса nginx
, потому что есть только 2 разных тома.
Пример: допустим, у вас есть следующая структура:
example/
|- web/
|- docker-compose.yml # your first docker compose file
|- nginx/
|- docker-compose.yml # your second docker compose file
Запуск docker-compose up
из папки web
(или docker-compose -f web/docker-compose.yml up
из каталога example
) фактически создаст том с именем web_static-files
(имя тома, определенного в файле docker-compose.yml
, с префиксом папки, в которой находится этот файл).
Итак, запуск docker-compose up
из папки nginx
фактически создаст nginx_static-files
вместо повторного использования web_static-files
, как вы хотите.
Вы можете использовать том, созданный с помощью web/docker-compose.yml
, указав в файле компоновки 2-го докера (nginx/docker-compose.yml
), что это внешний том, и его имя:
volumes:
static-files:
external:
name: web_static-files
Обратите внимание, что если вы не хотите, чтобы том (и все ресурсы) начинался с префикса имени папки (по умолчанию), а с помощью чего-то еще, вы можете добавить опцию -p
к команде docker-compose
:
docker-compose \
-f web/docker-compose.yml \
-p abcd \
up
Эта команда теперь создаст том с именем abcd_static-files
(который можно использовать во втором файле компоновки Docker).
Вы также можете определить создание томов в отдельном файле docker-compose
(например, volumes/docker-compose.yml
):
version: '3.6'
volumes:
static-files:
И ссылаться на этот том как на внешний, с именем volumes_static-files
, в web и nginx docker-compose.yml
файлах:
volumes:
static-files:
external:
name: volumes_static-files
К сожалению, вы не можете установить имя тома в docker compose, оно будет автоматически иметь префикс. Если это действительно проблема, вы также можете создать том вручную (docker volume create static-files
) перед выполнением любой команды docker-compose up
(хотя я не рекомендую это решение, потому что оно добавляет ручной шаг, который можно забыть, если вы воспроизводите развертывание на другое окружение).