code

Docker Compose-여러 컨테이너간에 명명 된 볼륨 공유

codestyles 2020. 11. 24. 08:02
반응형

Docker Compose-여러 컨테이너간에 명명 된 볼륨 공유


docker-compose 및 v3을 사용하고 있습니다. Docker에 볼륨을 마운트하려고합니다.

./appdata:/appdata

이 볼륨을 볼륨으로 한 다음 여러 컨테이너에서 해당 볼륨을 참조하고 싶습니다. 볼륨 구성 참조 만 도시 data-volume:없는 값으로 명명 된 볼륨으로, 그것은 위처럼 보이지 않도록.

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume

volumes:
     app-volume: ./appdata:/appdata

이것은 나에게 준다 :

오류 : './docker-compose.yml'파일에서 'app-volume'볼륨은 문자열이 아닌 매핑이어야합니다.

분명히 volumes키 / 값 쌍 을 변경해야한다는 것을 알고 있지만 서비스간에 볼륨을 공유 할 수 있도록이를 변경 하는 방법잘 모르겠습니다 .

나는 또한 체크 아웃 volumes_from했지만 이것은 효과적으로 다른 컨테이너로부터 상속을 허용합니다. 나는 누군가가 volumes_from원하는 매핑을 포함하는 다른 컨테이너에서 사용 하는 것을 보았지만 command: true컨테이너가 실제로 실행되지 않도록 설정하면 나에게는 해킹처럼 보입니다.

어떻게 할 수 있습니까?


참고, 내가 다음과 같은 작업이 :

nginx:
    volumes:
        - ./appdata:/appdata
php:
    volumes:
        - ./appdata:/appdata

그러나 그것은 단지 복제이며 명명 된 볼륨이 나를 피하는 데 도움이 될 수 있기를 바랍니다. :-)


명명 된 볼륨은 다음과 같은 방법으로 컨테이너간에 공유 할 수 있습니다.

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume: location_in_the_container

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume: location_in_the_container

volumes:
     app-volume: 

다음은 더 나은 이해를 위해 사용하는 예제 구성입니다. web컨테이너 에서 생성 된 정적 파일 을라는 명명 된 볼륨에 노출 한 다음 컨테이너에서 static-content읽고 제공합니다 nginx.

services:
  nginx:
    container_name: nginx
    build: ./nginx/

    volumes:
      - static-content:/usr/src/app

  web:
    container_name: web
    env_file: .env
    volumes:
      - static-content:/usr/src/app/public
    environment:
      - NODE_ENV=production

    command: npm run package

volumes:
  static-content:

This solves it without using named volumes:

      volumes:
          - ./appdata:/appdata

So, it looks like:

services:

  nginx:
      build: ./nginx/
      ports:
          - 80:80
      links:
          - php
      volumes:
          - ./appdata:/appdata

  php:
      build: ./php/
      expose:
          - 9000
      volumes:
          - ./appdata:/appdata

참고URL : https://stackoverflow.com/questions/44284484/docker-compose-share-named-volume-between-multiple-containers

반응형