Новые контейнеры, имеющие доступ к объему в существующем контейнере - PullRequest
0 голосов
/ 15 января 2020

У меня есть «главный» контейнер, который должен уже запускаться при запуске всех остальных.

В нем у меня есть каталог conf/, который эта служба отслеживает и применяет соответствующие изменения.

Как можно, чтобы каждый новый контейнер отбрасывал файл в этом каталоге?


реальный сценарий:

, учитывая мой docker-compose.yml ниже, я хочу каждую услугу (portainer, whoami, apache) для удаления файла .yml в сопоставлении пути "./traefik/conf/:/etc/traefik/conf/" службы traefik.

docker -compose.yml

version: "3.5"

services:

    traefik:
        image: traefik
        env_file: ./traefik/env
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
            - "8080:8080"
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
            - ./traefik/conf/:/etc/traefik/conf/
            - ./traefik/traefik.yml:/etc/traefik/traefik.yml

    portainer:
        image: portainer/portainer
        depends_on: [traefik]
        command: --no-auth -H unix:///var/run/docker.sock
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock

    whoami:
        image: containous/whoami
        depends_on: [traefik]

portainer.traefik.yml

http:
    routers:
        portainer:
            entryPoints: [http]
            middlewares: [redirect-to-http]
            service: portainer-preauth@docker
            rule: Host(`portainer.docker.mydomain`)

whoami.traefik.yml

http:
    routers:
        whoami:
            entryPoints: [http]
            middlewares: [redirect-to-http]
            service: whoami-preauth@docker
            rule: Host(`whoami.docker.mydomain`)

Где находятся файлы portainer.traefik.yml и whoami. traefik.yml находится? Если они находятся на хост-машине, вы можете напрямую скопировать их в ./traefik/conf/. - Shashank V

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

ниже приведена структура файла проекта.

project file structure

1 Ответ

1 голос
/ 15 января 2020

Вы можете использовать объем во всех сервисах. Просто определите его в вашем docker -compose.yml и назначьте его каждому сервису:

version: "3.5"

services:

    traefik:
        image: traefik
        env_file: ./traefik/env
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
            - "8080:8080"
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
            - ./traefik/conf/:/etc/traefik/conf/
            - ./traefik/traefik.yml:/etc/traefik/traefik.yml
            - foo:/path/to/share/

    portainer:
        image: portainer/portainer
        depends_on: [traefik]
        command: --no-auth -H unix:///var/run/docker.sock
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
            - foo:/another/path/to/share/

    whoami:
        image: containous/whoami
        depends_on: [traefik]
        volumes:
          - foo:/and/another/path/

    volumes:
      foo:
        driver: local

Это эквивалентно - volume-from функции "plain" Docker. Или, по крайней мере, то, что ближе всего к этому.

Ваш главный контейнер должен будет использовать тот же объем. Если этот контейнер не запускается в том же контексте Docker Compose, вы должны предварительно определить этот том.

...