Postgres, mariadb, mysql không sử dụng USER. Hình ảnh được cho là chính thức được xem xét để tuân thủ tài liệu thực hành tốt nhất, trong đó requires USER nếu có thể. Tại sao?Tại sao hình ảnh chính thức Docker không sử dụng USER theo yêu cầu của "thực tiễn tốt nhất"
Trả lời
Về cơ bản, USER là không phải có thể có trong hình ảnh chính thức. Nó mâu thuẫn với yêu cầu rằng "Người dùng bắt đầu có thể docker run official-image bash
mà không cần phải tìm hiểu về --entrypoint". Nếu bạn không có root, bạn không thể chỉnh sửa các tập tin cấu hình, cài đặt các gói như strace ... hoặc đặc biệt, sửa UID theo khối lượng. Thực tế, phong cách hình ảnh chính thức là được coi là (a) thực hành tốt nhất. (Vì vậy, userguide Docker nên đặt sự nhấn mạnh vào chạy daemon như không phải root và ít hơn vào USER đặc biệt)
IMO đây là một vấn đề. Các ví dụ phổ biến mà bạn có thể học hỏi từ đó không cho thấy cần phải đặt UID cố định. Nếu không, nếu bạn cập nhật bằng hình ảnh cơ sở để thêm người dùng khác, bạn sẽ phải can thiệp thủ công. Các phương pháp hay nhất nói rằng bạn nên cân nhắc đặt UID cố định, nhưng chúng thậm chí không hiển thị ví dụ về nó. Vì vậy, prominent ví dụ về simple Dockerfiles sử dụng USER không đặt UID cố định. Các hình ảnh chính thức không đặt UID cố định - giả vờ như thế này không phải là vấn đề - nhưng sau đó khối lượng dữ liệu brute-force với chown
, bởi vì tập lệnh nhập cảnh của chúng chạy dưới dạng gốc. Không phải rất ấn tượng.
Về mặt kỹ thuật, các Dockerfiles chính thức có thể được cố định bằng cách thêm nhiều hơn chown
và UID trao đổi với Dockerfile, nhưng điều đó dường như không mong muốn.
Tôi cho rằng phương án thay thế khác sẽ là bản cập nhật phụ thuộc vào đường dẫn. Tức là, giữ chown
xung quanh cho đến khi mọi người thực hiện cập nhật tự động của họ cho UID cố định (một vài tháng?) Rồi thả nó.
- 1. DTO: thực tiễn tốt nhất
- 2. Thực tiễn tốt nhất để sử dụng nhiều tệp .gitignore
- 3. JavaScript Thực tiễn tốt nhất
- 4. Thực tiễn tốt nhất khi sử dụng ổ cắm web?
- 5. Thực tiễn tốt nhất của NodeJS: Lỗi kiểm soát luồng?
- 6. Thực tiễn tốt nhất của LDAP
- 7. Thực tiễn tốt nhất để sử dụng HttpClient
- 8. Thực tiễn tốt nhất: Cách thực hiện tốt nhất Xếp hạng sao trong Mẫu Django
- 9. Thực tiễn tốt nhất của Lucene.Net
- 10. Thực tiễn tốt nhất về Sitecore
- 11. Thực tiễn tốt nhất để gọi phương thức mở NgbModal
- 12. Thực tiễn tốt nhất để xác thực API là gì?
- 13. Thực tiễn tốt nhất của Javascript, tại sao sử dụng dấu phẩy để khai báo hàm/biến chuỗi?
- 14. UIView Vẽ thực tiễn tốt nhất
- 15. Thực tiễn tốt nhất khi sử dụng Terraform
- 16. Thực tiễn tốt nhất về cài đặt cấu hình
- 17. iOS Facebook SDK - Thực tiễn tốt nhất?
- 18. Thực tiễn tốt nhất để sao lưu MySQL
- 19. Thực tiễn tốt nhất để sử dụng partials trong Rails
- 20. Thực tiễn tốt nhất: Xác thực đầu vào (Android)
- 21. Thực tiễn tốt nhất để sử dụng SQS của Amazon - Thăm dò hàng đợi
- 22. Thực tiễn tốt nhất của Python về ghi nhật ký
- 23. Tại sao hình ảnh Docker ăn lên không gian đĩa của tôi mà không được sử dụng bởi Docker
- 24. Mô hình hóa LDAP Thực tiễn tốt nhất
- 25. Thực tiễn tốt nhất về ứng dụng web Javascript
- 26. Thực tiễn tốt nhất cho hộp thoại phương thức góc
- 27. Thực tiễn tốt nhất: sử dụng không gian tên hoặc không gian mở lại?
- 28. Tiết kiệm một hình thức hình ảnh theo yêu cầu CLJ-http nộp
- 29. Ruby yêu cầu 'tệp' không hoạt động nhưng yêu cầu './file' thực hiện. Tại sao?
- 30. Android strings.xml Thực tiễn tốt nhất?