docker -составление общего ресурса с именованным разделом между службами с возможностью чтения / записи тома из указанного каталога c - PullRequest
0 голосов
/ 27 февраля 2020

Это может быть дубликатом, так как я предполагаю, что это обычный вариант использования для docker -compose. Тем не менее, я не могу найти похожий вопрос в этом конкретном c сценарии.

У меня есть docker -композитный файл со следующими двумя службами:

  processService:
    container_name: processservice
    image: mcr.microsoft.com/dotnet/core/sdk:3.1
    ports:
      - 5001:80
    volumes:
      - ./backend/packages/dotnet:/backend/packages/dotnet
      - ./backend/services/processService/src:/backend/services/processService/src
    working_dir: /backend/services/processService/src/ProcessService.Application
    command: dotnet watch run

  organizationService:
    container_name: organizationservice
    image: mcr.microsoft.com/dotnet/core/sdk:3.1
    ports:
      - 5002:80
    volumes:
      - ./backend/packages/dotnet:/backend/packages/dotnet
      - ./backend/services/organizationService/src:/backend/services/organizationService/src
    working_dir: /backend/services/organizationService/src/OrganizationService.Application
    command: dotnet watch run

Как в файле compose, я использую одинаковое монтирование тома для обеих служб, а именно: ./backend/packages/dotnet:/backend/packages/dotnet.

. Я хочу знать, возможно ли объявить этот том один раз в разделе томов, и затем повторно используйте его в разных сервисах.

Я попытался найти ответ на этот вопрос. Ответы, с которыми я сталкиваюсь, предлагают создать том вручную с помощью docker volume create foo, а затем использовать его следующим образом:

...
volumes:
- foo:/backend/packages/dotnet
...

Однако это не имеет смысла для меня, так как я не понимаю, как foo должен знать о каталоге, из которого я хочу, чтобы он читал / записывал, когда я не указал это в любой момент.

Я попытался прочитать документацию docker, но не могу найти ничего, связанного с созданием именованного тома, монтирующего каталог c.

Есть ли у кого-нибудь какие-либо предложения, как как выполнить sh это?

1 Ответ

0 голосов
/ 28 февраля 2020

Это два разных раздела volumes в файле docker:

  1. локальный (услуга)

    Расположен в служебная часть (как вы делали это в своем файле), локальные volumes разделы отображают объем (ы) данных (или пути к хостам) в местоположение контейнера.

  2. global

    Расположенный на том же уровне, что и раздел services:, глобальный volumes раздел именует и создает объем (ы) данных.

Тогда , вот как использовать тома данных в docker -композитном файле:

service1:
  volumes:
    - vol_1:location_1

service2:
  volumes:
    - vol_1:location_2

volumes:
  vol_1:

Таким образом, в вашем случае docker -композитная часть должна быть:

  processService:
    container_name: processservice
    image: mcr.microsoft.com/dotnet/core/sdk:3.1
    ports:
      - 5001:80
    volumes:
      - dotnet:/backend/packages/dotnet
      - processService:/backend/services/processService/src
    working_dir: /backend/services/processService/src/ProcessService.Application
    command: dotnet watch run

  organizationService:
    container_name: organizationservice
    image: mcr.microsoft.com/dotnet/core/sdk:3.1
    ports:
      - 5002:80
    volumes:
      - dotnet:/backend/packages/dotnet
      - organizationService:/backend/services/organizationService/src
    working_dir: /backend/services/organizationService/src/OrganizationService.Application
    command: dotnet watch run


volumes:
  dotnet:
  processService:
  organizationService:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...