Cách đặt đường dẫn trên máy chủ cho một ổ đĩa được đặt tên trong docker-compost.yml


82

Ví dụ dưới đây tạo dbdata có tên volume và tham chiếu nó bên trong dịch vụ db :

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

(từ https://stackoverflow.com/a/35675553/4291814 )

Tôi có thể thấy đường dẫn cho âm lượng được mặc định thành:

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

Câu hỏi của tôi là làm thế nào để định cấu hình đường dẫn trên máy chủ cho dbdataổ đĩa?

Câu trả lời:


70

Với localtrình điều khiển âm lượng có khả năng sử dụng các giá đỡ tùy ý; bằng cách sử dụng một mount liên kết, bạn có thể đạt được chính xác điều này.

Để thiết lập một tập có tên được gắn vào /srv/db-data, của bạn docker-compose.ymlsẽ trông giống như sau:

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'

Tôi chưa thử nghiệm nó với phiên bản 2 của định dạng tệp soạn thảo, nhưng https://docs.docker.com/compose/compose-file/compose-vers bệ/# version-2 không cho biết rằng nó sẽ không hoạt động.

Tôi cũng chưa thử nghiệm nó trên Windows ...


3
Bạn có thể sử dụng một mount liên kết với cú pháp đơn giản hơn nhiều: volume: - ./dbdata:/var/lib/mysql. 'Vấn đề' duy nhất với mount mount là nó sẽ không tự động sao chép nội dung vùng chứa vào máy chủ lưu trữ, không giống như một tập đã đặt tên. docs.docker.com/compose/compose-file/#volumes
mikey Ngày

12
OP đã hỏi cụ thể về các tập đã đặt tên , chứ không phải cách sử dụng mount liên kết một cách dễ dàng nhất. Nếu bạn muốn định cấu hình đường dẫn cho một ổ đĩa đã đặt tên, bạn có thể đạt được điều này bằng một mount liên kết, giống như được hiển thị ở trên. Sử dụng các tập đã đặt tên có lợi thế là bạn có thể dễ dàng sử dụng lại chúng trên docker-compo.yml của mình.
Christian Ulbrich

Xin lỗi Christian, đã không tìm hiểu rằng điều này / đã / đang sử dụng một tập có tên. Tôi nghĩ rằng đây là cách trình bày cách sử dụng một liên kết ràng buộc. Đây có vẻ là giải pháp chính xác (xem: stackoverflow.com/a/45039609/3080207).
mikey

ý bạn là gì khi gắn kết tùy ý? nó là một đường dẫn ngẫu nhiên qua chính bộ chứa docker hay qua máy chủ? Cảm ơn.
Amr Afifi

Bạn có thể sử dụng gắn kết tùy ý trên máy chủ, ví dụ: bằng cách này, bạn cũng có thể gắn kết một thứ gì đó với say sshfs và liên kết gắn kết nó vào một ổ đĩa được đặt tên.
Christian Ulbrich

8

Vị trí của các tập đã đặt tên được quản lý bởi docker; nếu bạn muốn tự mình chỉ định vị trí, bạn có thể "gắn kết" thư mục lưu trữ hoặc sử dụng một plugin khối lượng cho phép bạn chỉ định một đường dẫn.

Bạn có thể tìm thấy một số chi tiết trong một câu trả lời khác mà tôi đã đăng gần đây; https://stackoverflow.com/a/36321403/1811501


1
Trên thực tế, bạn chỉ cần sử dụng localplugin khối lượng, được cung cấp cùng với docker; xem câu trả lời của tôi cho một ví dụ.
Christian Ulbrich

0

Kể từ docker-compose v3.2 bây giờ bạn có thể làm điều đó như sau:

Lưu ý: Nhiều, như tôi đã hình dung nếu bạn đặt version: "3"nó sẽ sử dụng V3 mới nhất / mới nhất, nó không sử dụng v3.0, bạn PHẢI chỉ định ở mức tối thiểu3.2 để sử dụng phương pháp cấu hình bên dưới.

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:

Ghi chú:

Các tập đã đặt tên phải được liệt kê trong khóa âm lượng cấp cao nhất, như được minh họa.


Xin lỗi nếu tôi không hiểu câu trả lời của bạn @FreeSoftwareServer, câu hỏi ở đây là "Làm thế nào chúng tôi có thể ánh xạ các tập đã đặt tên vào thư mục lưu trữ"?
Dheeraj Kumar

Tôi đã cố gắng đơn giản hóa câu trả lời của mình, có lẽ hãy bắt đầu một câu hỏi mới với vấn đề cụ thể của bạn. @Dheeraj Kumar
FreeSoftwareServers

Làm thế nào được dbdataánh xạ tới dịch vụ dbdưới dạng khối lượng của nó? @FreeSoftwareServers
Nam G VU

Dòng nguồn? @NamGVU Có lẽ một câu hỏi mới với vấn đề cụ thể của bạn sẽ tốt hơn
FreeSoftwareServers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.