Trong docker, các tệp được tạo bên trong vùng chứa có xu hướng có quyền sở hữu không thể đoán trước trong khi kiểm tra chúng từ máy chủ. Theo mặc định, chủ sở hữu của các tệp trên ổ đĩa là root (uid 0), nhưng ngay khi các tài khoản người dùng không phải root tham gia vào vùng chứa và ghi vào hệ thống tệp, chủ sở hữu ít nhiều trở nên ngẫu nhiên từ góc độ máy chủ.
Đó là một vấn đề khi bạn cần truy cập dữ liệu khối lượng từ máy chủ lưu trữ bằng cùng một tài khoản người dùng đang gọi các lệnh docker.
Các cách giải quyết điển hình là
- buộc người dùng uID tại thời điểm tạo trong Dockerfiles (không di động)
- chuyển UID của người dùng máy chủ tới
docker run
lệnh dưới dạng một biến môi trường và sau đó chạy một sốchown
lệnh trên các ổ đĩa trong một tập lệnh entrypoint.
Cả hai giải pháp này đều có thể cung cấp một số quyền kiểm soát đối với các quyền thực tế bên ngoài vùng chứa.
Tôi mong đợi không gian tên người dùng là giải pháp cuối cùng cho vấn đề này. Tôi đã chạy một số thử nghiệm với phiên bản 1.10 được phát hành gần đây và --usern-remap được đặt cho tài khoản máy tính để bàn của mình. Tuy nhiên, tôi không chắc rằng nó có thể làm cho quyền sở hữu tệp trên các ổ được gắn kết dễ dàng hơn để xử lý, tôi sợ rằng nó thực sự có thể ngược lại.
Giả sử tôi bắt đầu vùng chứa cơ bản này
docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit
Và sau đó kiểm tra nội dung từ máy chủ:
ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/
-rw-r--r-- 1 100000 100000 6 Feb 8 19:43 test.txt
Số '100000' này là UID phụ của người dùng máy chủ của tôi, nhưng vì nó không tương ứng với UID của người dùng của tôi, tôi vẫn không thể chỉnh sửa test.txt nếu không có đặc quyền. Người dùng phụ này dường như không có bất kỳ mối quan hệ nào với người dùng thông thường thực sự của tôi bên ngoài docker. Nó không được ánh xạ lại.
Các cách giải quyết được đề cập trước đó trong bài đăng này bao gồm việc căn chỉnh UID giữa máy chủ và vùng chứa không hoạt động nữa do UID->sub-UID
ánh xạ xảy ra trong không gian tên.
Sau đó, có cách nào để chạy docker với không gian tên người dùng được bật (để cải thiện bảo mật), trong khi vẫn giúp người dùng máy chủ chạy docker có thể sở hữu các tệp được tạo trên ổ đĩa không?