Điều này xảy ra bởi vì âm lượng đang sử dụng private
lan truyền gắn kết. Điều này có nghĩa là một khi gắn kết xảy ra, bất kỳ thay đổi nào xảy ra ở phía gốc (ví dụ: phía "máy chủ" trong trường hợp Docker) sẽ không hiển thị bên dưới giá treo.
Có một số cách để xử lý việc này:
Thực hiện gắn kết NFS trước, sau đó khởi động container. Gắn kết sẽ lan truyền đến container, tuy nhiên như trước khi có bất kỳ thay đổi nào đối với mount sẽ không được nhìn thấy bởi container (bao gồm cả unmounts).
Sử dụng tuyên truyền "nô lệ". Điều này có nghĩa là một khi gắn kết được tạo, bất kỳ thay đổi nào ở phía gốc (máy chủ docker) sẽ có thể được nhìn thấy trong mục tiêu (trong vùng chứa). Nếu bạn tình cờ thực hiện gắn kết lồng nhau, bạn sẽ muốn sử dụng rslave
( r
cho đệ quy).
Ngoài ra còn có tuyên truyền "chia sẻ". Chế độ này sẽ thực hiện các thay đổi đối với điểm gắn kết từ bên trong container truyền đến máy chủ, cũng như cách khác. Vì người dùng của bạn thậm chí sẽ không có đặc quyền để thực hiện các thay đổi như vậy (trừ khi bạn thêm CAP_SYS_ADMIN), đây có thể không phải là điều bạn muốn.
Bạn có thể đặt chế độ lan truyền khi tạo mount như vậy:
$ docker run -v /foo:/bar:private
Cách khác là sử dụng âm lượng thay vì gắn máy chủ. Bạn có thể làm điều này như vậy:
$ docker volume create \
--name mynfs \
--opt type=nfs \
--opt device=:<nfs export path> \
--opt o=addr=<nfs host> \
mynfs
$ docker run -it -v mynfs:/foo alpine sh
Điều này sẽ đảm bảo luôn luôn gắn kết trong container cho bạn, không phụ thuộc vào việc thiết lập máy chủ theo một cách cụ thể hoặc xử lý việc truyền bá mount.
lưu ý : :
ở phía trước của đường dẫn thiết bị là bắt buộc, chỉ có điều gì đó kỳ lạ về mô-đun hạt nhân nfs.
lưu ý : Docker hiện không phân giải <nfs host>
từ tên DNS (tên này sẽ là 1.13) vì vậy bạn sẽ cần cung cấp địa chỉ IP tại đây.
Thêm chi tiết về các gắn kết "cây con chung": https://www.kernel.org/doc/Documentation/filesystems/ Sharedsubtree.txt