docker-compose.yml의 명명 된 볼륨에 대한 호스트 경로를 설정하는 방법


82

아래 예제는 volume이라는 dbdata를 만들고 db 서비스 내에서 참조합니다 .

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local

( https://stackoverflow.com/a/35675553/4291814에서 )

볼륨의 기본 경로는 다음과 같습니다.

/var/lib/docker/volumes/<project_name>_dbdata

내 질문은 dbdata볼륨 에 대한 호스트의 경로를 구성하는 방법입니다 .

답변:


70

으로 local볼륨 드라이버 임의의 마운트를 사용할 수있는 기능을 제공; 바인드 마운트 를 사용하면 정확히이 작업을 수행 할 수 있습니다.

에 장착됩니다 명명 된 볼륨을 설정하려면 /srv/db-data, 당신은 docker-compose.yml다음과 같을 것이다 :

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/srv/db-data'

compose 파일 형식의 버전 2로 테스트 하지는 않았지만 https://docs.docker.com/compose/compose-file/compose-versioning/#version-2 는 작동하지 않아야 함을 나타내지 않습니다.

Windows에서도 테스트하지 않았습니다 ...


3
그보다 훨씬 간단한 구문으로 bind 마운트를 사용할 수 있습니다 : 볼륨 :-./dbdata:/var/lib/mysql. 바인드 마운트의 유일한 '문제'는 명명 된 볼륨과 달리 컨테이너 내용을 호스트에 자동으로 복사하지 않는다는 것입니다. docs.docker.com/compose/compose-file/#volumes
mikey

12
OP 는 가장 쉬운 방법으로 바인드 마운트를 사용하는 방법이 아니라 명명 된 볼륨 에 대해 구체적으로 물었 습니다. 명명 된 볼륨에 대한 경로를 구성하려면 위에 표시된 것처럼 바인드 마운트를 사용하여이를 수행 할 수 있습니다. 명명 된 볼륨을 사용하면 docker-compose.yml에서 간단히 재사용 할 수 있다는 이점이 있습니다.
Christian Ulbrich

미안한 크리스천, 이것이 이름이 지정된 볼륨을 사용하고 있다고 생각하지 않았습니다. 나는 이것이 바인드 마운트를 사용하는 방법을 제시한다고 생각했습니다. 이것은 올바른 해결책 인 것 같습니다 (참조 : stackoverflow.com/a/45039609/3080207).
마이키

임의의 마운트 란 무엇을 의미합니까? 도커 컨테이너 자체 또는 호스트 시스템에 대한 임의의 경로입니까? 감사.
Amr Afifi

호스트에서 임의의 마운트를 사용할 수 있습니다. 이런 식으로 sshfs를 사용하여 무언가를 마운트하고 명명 된 볼륨에 바인딩 마운트 할 수도 있습니다.
Christian Ulbrich

8

명명 된 볼륨의 위치는 docker에 의해 관리됩니다. 위치를 직접 지정하려는 경우 호스트 디렉토리를 "바인드 마운트"하거나 경로를 지정할 수있는 볼륨 플러그인을 사용할 수 있습니다.

최근에 게시 한 다른 답변에서 몇 가지 세부 사항을 찾을 수 있습니다. https://stackoverflow.com/a/36321403/1811501


1
실제로 localdocker 자체와 함께 제공되는 볼륨 플러그인 을 사용해야합니다 . 예를 들어 내 대답을 참조하십시오.
Christian Ulbrich는

0

현재 docker-compose v3.2다음과 같이 지금 그것을 할 수 있습니다 :

참고 : version: "3"최신 / 최신 V3를 사용할 것이라고 생각했듯이 많은 경우를 사용하지 않으므로 아래 구성 방법을 사용하려면 v3.0최소한 지정해야 3.2합니다.

https://docs.docker.com/compose/compose-file/#volumes

version: "3.2"
services:
  db:
    image: postgres:latest
    volumes: 
      - type: volume
        source: /opt/db/vols/dbdata
        target: /var/lib/postgresql/data
        volume:
          nocopy: true



volumes:
   dbdata:

노트 :

이름이 지정된 볼륨은 그림과 같이 최상위 볼륨 키 아래에 나열되어야합니다.


@FreeSoftwareServer에 대한 답변을 이해하지 못했다면 죄송합니다. 여기서 질문은 "이름이 지정된 볼륨을 호스트 폴더에 매핑하는 방법"입니다.
Dheeraj Kumar

나는 내 대답을 단순화하려고 노력했으며 아마도 특정 문제로 새로운 질문을 시작했습니다. @Dheeraj 쿠마
FreeSoftwareServers

볼륨으로서 dbdata서비스에 어떻게 매핑 db됩니까? @FreeSoftwareServers
Nam G VU

소스 라인? @NamGVU 아마도 특정 문제에 새로운 질문은 더 나은 것
FreeSoftwareServers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.