2015-06-04 20 views
11

Muốn liệt kê tất cả các thư mục chứa được gắn khối lượng.Cách liệt kê các ổ đĩa được gắn đế từ bên trong hộp chứa

ví dụ để có thể nhận được thông tin tương tự như tôi nhận được từ

docker inspect --format "{{ .Volumes }}" <self> 

Nhưng từ bên trong container và mà không cần phải cài đặt docker trong đó.

Tôi đã thử cat /proc/mounts nhưng không thể tìm thấy bộ lọc phù hợp cho nó.

+0

thử thêm cho 'bạn Docker chạy command' gắn kết ràng buộc của' /var/run/docker.sock -v:/var/run/docker.sock' – user2915097

+0

tôi muốn nói mà không cần cài Docker bên trong và không chạy docker bên trong vì nó tương đương với việc cấp đặc quyền sudo cho thùng chứa bên trong cho máy chủ bên ngoài. –

+2

Có thực sự không phải là bất kỳ cách nào từ bên trong một container để xác định Docker khối lượng gắn kết (mà không tiếp xúc với api Docker). – larsks

Trả lời

1

Nếu máy chủ của bạn là Docker OSX, khối lượng gắn tôi sẽ gõ osxfs (hoặc fuse.osxfs). Bạn có thể chạy một

mount | grep osxfs | awk '{print $3}'

và có được một danh sách của tất cả các khối lượng gắn kết.

Nếu máy chủ docker của bạn là Linux (ít nhất là Ubuntu 14+, có thể là những người khác), khối lượng xuất hiện trên/dev, chứ không phải trên thiết bị nằm trong hệ thống tệp/dev của vùng chứa. Các tập sẽ nằm dọc theo /etc/resolv.conf,/etc/hostname và/etc/hosts. Nếu bạn thực hiện mount | grep ^/dev để bắt đầu, sau đó lọc ra bất kỳ tệp nào trong ls /dev/*, sau đó lọc ra ba tệp được liệt kê ở trên, bạn nên để lại với khối lượng lưu trữ.

mount | grep ^/dev/ | grep -v /etc | awk '{print $3}'

tôi đoán là các chi tiết cụ thể khác nhau từ Linux sang Linux. Không lý tưởng, nhưng ít nhất có thể tìm ra.

+0

Làm việc với máy chủ và khách Ubuntu của tôi. Đó là những gì tôi cần. Cảm ơn! –

0

Như bạn có thể đọc từ nhiều bình luận bạn đã nhận, một vùng chứa ban đầu không có gì ngoài một phần hạn chế, dành riêng cho các tài nguyên được cắt hoàn toàn khỏi phần còn lại của máy. Nó không phải là nhận thức được một docker, và bên trong container tất cả mọi thứ hoạt động như thể nó là một máy riêng biệt. Sắp xếp như ma trận, tôi đoán;) Bạn có quyền truy cập vào hạt nhân của máy chủ và các tài nguyên của nó, nhưng lại bị hạn chế chỉ là một tập hợp được lọc ra. Điều này được thực hiện với chức năng "cgroups" tuyệt vời đi kèm với hạt nhân Unix/Linux.

Bây giờ tin tốt: Có nhiều cách để bạn cung cấp thông tin cho docker của bạn, nhưng đó là điều mà bạn sẽ phải cung cấp và tự xây dựng.

Cách quảng cáo dễ nhất mạnh nhất là gắn ổ cắm unix nằm trên máy chủ của bạn tại /var/run/docker.sock vào bên trong vùng chứa của bạn tại cùng một vị trí. Bằng cách đó, khi bạn sử dụng docker client bên trong container của bạn, bạn đang trực tiếp nói chuyện với công cụ docker trên máy chủ của bạn. Tuy nhiên, với sức mạnh to lớn thì có trách nhiệm lớn. Đây là một thiết lập tốt đẹp, nhưng nó không phải là rất an toàn. Một khi ai đó quản lý để có được vào docker của bạn nó có quyền truy cập root vào hệ thống máy chủ của bạn theo cách này.

Một cách tốt hơn là cung cấp danh sách gắn kết máng cài đặt môi trường hoặc bám vào một số quy ước được thiết lập để có thể dự đoán giá treo.

(Bạn có nhận ra rằng có một tham số để gắn, để cung cấp cho thú cưỡi một bí danh cho bên Docker của bạn?)

0

Lệnh docker exec có lẽ là những gì bạn đang tìm kiếm.

Điều này sẽ cho phép bạn chạy các lệnh tùy ý bên trong vùng chứa hiện tại.

Ví dụ:

docker exec -it <mycontainer> bash 

Tất nhiên, bất cứ điều gì chỉ huy bạn đang chạy phải tồn tại trong hệ thống tập tin chứa.

#docker cp >>>> Copy files/folders between a container and the local filesystem 
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH 
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH 

để sao chép đầy đủ thư mục:

docker cp ./src/build b081dbbb679b:/usr/share/nginx/html 

Lưu ý - Điều này sẽ sao chép xây dựng thư mục trong container .../nginx/html/thư mục để sao chép chỉ tập tin có trong thư mục:

docker cp ./src/build/ b081dbbb679b:/usr/share/nginx/html 

Lưu ý - Thao tác này sẽ sao chép nội dung của thư mục xây dựng trong vùng chứa của …./nginx/html/ directory

D của vùng chứa ocker Tùy chọn lưu trữ:

Khối lượng được lưu trữ trong một phần của hệ thống tệp lưu trữ được quản lý bởi Docker (/ var/lib/docker/volumes/trên Linux). Các quy trình không Docker không nên sửa đổi phần này của hệ thống tập tin. Âm lượng là cách tốt nhất để duy trì dữ liệu trong Docker.

Khi bạn tạo một ổ đĩa, nó được lưu trữ trong một thư mục trên máy chủ Docker. Khi bạn gắn ổ đĩa vào một vùng chứa, thư mục này là những gì được gắn vào thùng chứa. Điều này tương tự như cách gắn kết các gắn kết hoạt động, ngoại trừ khối lượng được quản lý bởi Docker và được phân lập từ chức năng cốt lõi của máy chủ.

Một khối lượng nhất định có thể được ghép đồng thời vào nhiều vùng chứa. Khi không có vùng chứa đang chạy nào đang sử dụng ổ đĩa, ổ đĩa vẫn có sẵn cho Docker và không bị xóa tự động. Bạn có thể loại bỏ các ổ đĩa không sử dụng bằng cách sử dụng khối lượng docker prune.

Khi bạn lắp một ổ đĩa, nó có thể được đặt tên hoặc ẩn danh. Khối lượng ẩn danh không được đặt tên rõ ràng khi chúng được gắn lần đầu tiên vào một vùng chứa, vì vậy Docker cung cấp cho chúng một tên ngẫu nhiên được đảm bảo là duy nhất trong một máy chủ Docker đã cho. Bên cạnh tên, tên và khối lượng ẩn danh hoạt động theo cùng một cách.

Khối lượng cũng hỗ trợ sử dụng trình điều khiển âm lượng, cho phép bạn lưu trữ dữ liệu của mình trên máy chủ từ xa hoặc nhà cung cấp dịch vụ đám mây, trong số các khả năng khác.

Gắn kết gắn kết có thể được lưu trữ ở mọi nơi trên hệ thống máy chủ. Họ thậm chí có thể là các tệp hoặc thư mục hệ thống quan trọng. Các quy trình không Docker trên máy chủ Docker hoặc thùng chứa Docker có thể sửa đổi chúng bất cứ lúc nào. Có sẵn kể từ những ngày đầu của Docker. Gắn kết gắn kết có chức năng giới hạn so với khối lượng. Khi bạn sử dụng một gắn kết ràng buộc, một tập tin hoặc thư mục trên máy chủ được gắn vào một thùng chứa. Tệp hoặc thư mục được tham chiếu bởi đường dẫn đầy đủ của nó trên máy chủ. Tệp hoặc thư mục không cần tồn tại trên máy chủ Docker. Nó được tạo ra theo yêu cầu nếu nó chưa tồn tại. Gắn kết gắn kết rất hiệu quả, nhưng chúng dựa vào hệ thống tệp của máy chủ lưu trữ có cấu trúc thư mục cụ thể có sẵn. Nếu bạn đang phát triển các ứng dụng Docker mới, hãy cân nhắc sử dụng các tập đã đặt tên thay thế. Bạn không thể sử dụng lệnh Docker CLI để quản lý trực tiếp gắn kết gắn kết.

Một tác dụng phụ của việc sử dụng gắn kết ràng buộc, tốt hơn hoặc tệ hơn là bạn có thể thay đổi hệ thống tệp lưu trữ thông qua các quy trình đang chạy trong vùng chứa, bao gồm tạo, sửa đổi hoặc xóa các tệp hoặc thư mục hệ thống quan trọng. Đây là một khả năng mạnh mẽ có thể có các tác động bảo mật, bao gồm tác động đến các quy trình không Docker trên hệ thống máy chủ.

Gắn kết tmpfs chỉ được lưu trữ trong bộ nhớ của hệ thống lưu trữ và không bao giờ được ghi vào hệ thống tệp của hệ thống lưu trữ.

Gắn kết tmpfs không được lưu trên đĩa, trên máy chủ Docker hoặc trong vùng chứa. Nó có thể được sử dụng bởi một thùng chứa trong suốt thời gian tồn tại của thùng chứa, để lưu trữ trạng thái không liên tục hoặc thông tin nhạy cảm. Ví dụ, nội bộ, các dịch vụ swarm sử dụng các gắn kết tmpfs để gắn các bí mật vào các thùng chứa của một dịch vụ.

Nếu bạn cần chỉ định tùy chọn trình điều khiển âm lượng, bạn phải sử dụng --mount. -v hoặc --volume: Bao gồm ba trường, được phân tách bằng dấu hai chấm (:). Các trường phải theo đúng thứ tự và ý nghĩa của từng trường không rõ ràng ngay lập tức. o Trong trường hợp khối lượng được đặt tên, trường đầu tiên là tên của ổ đĩa, và là duy nhất trên một máy chủ đã cho. Đối với khối lượng ẩn danh, trường đầu tiên bị bỏ qua. o Trường thứ hai là đường dẫn nơi tệp hoặc thư mục sẽ được gắn trong vùng chứa. o Trường thứ ba là tùy chọn và là danh sách tùy chọn được phân cách bằng dấu phẩy, chẳng hạn như ro. Các tùy chọn này được thảo luận dưới đây. • --mount: Bao gồm nhiều cặp khóa-giá trị, được phân cách bằng dấu phẩy và mỗi dấu phẩy chứa một dấu =. Cú pháp --mount có nhiều chi tiết hơn v hoặc - volume, nhưng thứ tự của các khóa không quan trọng, và giá trị của cờ dễ hiểu hơn. o Loại gắn kết, có thể gắn kết, âm lượng hoặc tmpfs. Chủ đề này thảo luận về khối lượng, do đó, loại sẽ luôn là khối lượng. o Nguồn gắn kết. Đối với các tập đã đặt tên, đây là tên của ổ đĩa. Đối với khối lượng ẩn danh, trường này bị bỏ qua. Có thể được chỉ định là nguồn hoặc src. o đích sẽ lấy làm giá trị của nó đường dẫn nơi tệp hoặc thư mục sẽ được gắn trong vùng chứa. Có thể được chỉ định làm đích, dst hoặc đích. o Tùy chọn chỉ đọc, nếu có, làm cho gắn kết gắn kết vào vùng chứa dưới dạng chỉ đọc. o Tùy chọn chọn âm lượng, có thể được chỉ định nhiều lần, lấy cặp khóa-giá trị bao gồm tên tùy chọn và giá trị của nó.

Các vấn đề liên quan