Gắn nhiều khối lượng trên một container docker?


151

Tôi biết tôi có thể gắn một thư mục trong máy chủ của mình vào thùng chứa của mình bằng cách sử dụng một cái gì đó như

docker run -t -i -v '/on/my/host:/on/the/container' ubuntu /bin/bash

Có cách nào để tạo nhiều hơn một cặp máy chủ-container không? ví dụ: danh sách được phân tách bằng dấu phẩy hoặc truyền vào một mảng?


vì tôi hiểu trạng thái hiện tại của các điều khoản tài liệu, bạn không thể gắn kết một tập (tiêu đề câu hỏi), bạn chắc chắn có thể có nhiều liên kết gắn kết với các thư mục lưu trữ (đó là những gì được yêu cầu trong phần thân của câu hỏi)
Alexei Martianov

Câu trả lời:


259

Vượt qua nhiều -vđối số.

Ví dụ:

docker -v /on/my/host/1:/on/the/container/1 \
       -v /on/my/host/2:/on/the/container/2 \
       ...

2
Được rồi, vì vậy tôi đang làm điều này theo cùng một cách chính xác nhưng khi tôi thử gọi cái thứ hai thì nó nói rằng nó không được tìm thấy.
mẹ

docker run -v / home / usr / workspace / proj / WebContent / file / username: / mycode -v / home / usr / workspace / proj / WebContent / file: / tst gcc: 4.9 sh -c 'cd mycode; gcc -o myapp ./mycode.c; cd tst; ./myapp <./test.txt 'Đây là lệnh của tôi, tôi đang cố gắng biên dịch mycode.c trong tập đầu tiên, nhưng cung cấp cho cùng một tệp stdin từ một tập khác. Tôi phải làm nó như thế nào?
mẹ

1
@YehCheez, tôi (mạnh mẽ) đề nghị mở câu hỏi này dưới dạng một câu hỏi riêng biệt và cố gắng xây dựng một trình tái tạo. (Nếu bạn có thể sửa lỗi với hình ảnh Docker trong sổ đăng ký công khai và tạo tất cả các phụ thuộc cục bộ trong tập lệnh được đưa ra trong câu hỏi, đó sẽ là lý tưởng).
Charles Duffy

Có phải nó luôn cần những con đường tuyệt đối?
xatzistnr

3
Điểm đến phải luôn tuyệt đối. Nguồn cần phải là một đường dẫn tuyệt đối hoặc mã định danh cho một tập được đặt tên - xem docs.docker.com/engine/admin/volume/volume cho các tài liệu ở phần sau.
Charles Duffy

19

Docker hiện khuyên bạn nên chuyển sang sử dụng --mount.

Nhiều gắn kết âm lượng cũng được giải thích chi tiết trong tài liệu Docker hiện tại.

Từ: https://docs.docker.com/stiving/bind-mounts/

$ docker run -d \
  -it \
  --name devtest \
  --mount type=bind,source="$(pwd)"/target,target=/app \
  --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave \
  nginx:latest

Câu trả lời cũ hơn vẫn nên làm việc; chỉ cố gắng giữ câu trả lời phù hợp với phương pháp được biết đến hiện tại.


Thật đáng để thêm lý do duy nhất Docker khuyên bạn nên di chuyển là vì nghiên cứu của họ cho thấy - phần mềm dễ sử dụng hơn và nó có nhiều tùy chọn hơn. Sử dụng -v hoặc --mount là hoàn toàn tốt, điều này tùy thuộc vào sở thích và nhu cầu cá nhân của bạn.
KillerKode


6

Bạn có thể chỉ đọc hoặc đọc và viết trên âm lượng

docker -v /on/my/host/1:/on/the/container/1:ro \

docker -v /on/my/host/2:/on/the/container/2:rw \

1
cái nào là tùy chọn mặc định?
Hammad Dar

-9

Hoặc bạn có thể làm

docker run -v /var/volume1 -v /var/volume2 DATA busybox true

4
Đây không phải là những gì OP là sau. Điều này tạo ra một khối lượng trong container và không ràng buộc nó trên máy chủ.
Ioannis

8
Bạn nói đúng, nên là: docker run -v / var / volume1: / container / volume1 -v / var / volume2: / container / volume2 DATA busybox true
Joost van der Laan
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.