использовать объем, определенный в Dockerfile из docker-compose - PullRequest
0 голосов
/ 03 января 2019

Например, у меня есть этот сервис и том, определенные в моем файле docker-compose

  postgres:
    image: postgres:9.4
    volumes:
      - db_data:/var/lib/postgresql/data
  volumes:
    blue_prod_db:
      driver: rancher-nfs

Тогда. если вы определите том внутри Dockerfile следующим образом:

RUN mkdir /stuff
COPY ./stuff/* /stuff/
VOLUME /stuff

Как позже вы можете получить к нему доступ через конфигурацию docker-compose и добавить его в контейнер?

1 Ответ

0 голосов
/ 03 января 2019

При настройке в Dockerfile том приведет к тому, что любой контейнер, запущенный из этого образа, включая временные контейнеры позже в процессе сборки из команды RUN, будет иметь том, определенный в указанном месте, например, / stuff.Если вы не определите источник для этого тома во время выполнения, вы получите анонимный том, созданный Docker для вас в этом месте.Тем не менее, вы всегда можете определить том с источником во время выполнения (даже без определения тома), указав расположение в вашем файле компоновки:

version: "3"
services:
  app:
    image: your_image
    volumes:
      - data:/stuff
volumes:
  data:

Обратите внимание, что есть два раздела томов, один дляконкретный сервис, который указывает, где том смонтирован внутри контейнера, и другой на верхнем уровне, где вы можете указать источник тома.Без указания источника вы получите локальный драйвер тома с каталогом в / var / lib / docker bind, смонтированный в контейнере.

Я не рекомендую указывать тома в Dockerfile в целом, он нарушаетвозможность расширять изображение на последующих этапах для дочерних изображений и загромождать файловую систему анонимными томами, которые нелегко отследить до их происхождения.Лучше всего определять их во время выполнения с помощью чего-то вроде составного файла.

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