Tin tốt: docker mới (phiên bản 19.03 (hiện đang thử nghiệm)) sẽ có thể chạy rootless phủ nhận các vấn đề có thể xảy ra khi sử dụng người dùng root. Không còn gây rối với quyền nâng cao, root và bất cứ điều gì có thể mở máy của bạn khi bạn không muốn.
Video về điều này từ [DockerCon 2019] Làm cứng daemon Docker với chế độ Rootless
Một vài Caveats đến chế độ Docker không root
Các kỹ sư của Docker cho biết chế độ không root có thể được coi là sự thay thế cho bộ tính năng động cơ Docker hoàn chỉnh. Một số hạn chế đối với chế độ không root bao gồm:
- kiểm soát tài nguyên cgroups, hồ sơ bảo mật apparmor, điểm kiểm tra / khôi phục, mạng lớp phủ, vv không hoạt động trên chế độ không root.
- Các cổng tiếp xúc từ các container hiện yêu cầu quá trình trợ giúp xã hội thủ công.
- Chỉ các bản phân phối dựa trên Ubuntu mới hỗ trợ các hệ thống tệp lớp phủ ở chế độ không root.
- Chế độ không cần root hiện chỉ được cung cấp cho các bản dựng hàng đêm có thể không ổn định như bạn đã quen.
Kể từ docker 19.3, điều này đã lỗi thời (và nguy hiểm hơn mức cần thiết):
Các nhãn hiệu Docker có này để nói về nó:
Cho phép truy cập không root
Trình nền của docker luôn chạy như người dùng root và kể từ phiên bản Docker 0.5.2, trình nền của docker liên kết với một ổ cắm Unix thay vì cổng TCP. Theo mặc định, ổ cắm Unix được sở hữu bởi người dùng root và do đó, theo mặc định, bạn có thể truy cập nó bằng sudo.
Bắt đầu từ phiên bản 0.5.3, nếu bạn (hoặc trình cài đặt Docker của bạn) tạo một nhóm Unix có tên là docker và thêm người dùng vào nó, thì trình nền của docker sẽ làm cho quyền sở hữu ổ cắm Unix được đọc / ghi bởi nhóm docker khi trình nền bắt đầu . Trình nền của docker phải luôn luôn chạy như người dùng root, nhưng nếu bạn chạy ứng dụng khách docker với tư cách là người dùng trong nhóm docker thì bạn không cần thêm sudo vào tất cả các lệnh của máy khách. Kể từ 0.9.0, bạn có thể chỉ định rằng một nhóm không phải là docker nên sở hữu ổ cắm Unix với tùy chọn -G.
Cảnh báo: Nhóm docker (hoặc nhóm được chỉ định bằng -G) tương đương với root; xem chi tiết Docker Daemon Attack Surface và blogpost này về Tại sao chúng tôi không cho phép người dùng không root chạy Docker trong CentOS, Fedora hoặc RHEL (cảm ơn michael-n).
Trong bản phát hành gần đây của chế độ rootless thử nghiệm trên GitHub , các kỹ sư đề cập đến chế độ rootless cho phép chạy dockerd như một người dùng không có quyền, sử dụng user_namespaces (7), mount_namespaces (7), network_namespaces (7).
Người dùng cần chạy dockerd-rootless.sh thay vì dockerd.
$ dockerd-rootless.sh --experimental
Vì chế độ Rootless là thử nghiệm, người dùng cần phải luôn chạy dockerd-rootless.sh với chương trìnhexexperimental.
Điều quan trọng cần đọc: các bước sau khi cài đặt cho Linux (nó cũng liên kết với các chi tiết Docker Daemon Attack Surface ).
Quản lý Docker với tư cách là người dùng không root
Trình nền của docker liên kết với một ổ cắm Unix thay vì cổng TCP. Theo mặc định, ổ cắm Unix được sở hữu bởi người dùng root và những người dùng khác chỉ có thể truy cập nó bằng sudo. Trình nền docker luôn chạy như người dùng root.
Nếu bạn không muốn sử dụng sudo khi bạn sử dụng lệnh docker, hãy tạo một nhóm Unix có tên là docker và thêm người dùng vào nó. Khi trình nền của docker khởi động, nó làm cho quyền sở hữu của ổ cắm Unix được đọc / ghi bởi nhóm docker.
Thêm nhóm docker nếu nó chưa tồn tại:
sudo groupadd docker
Thêm người dùng được kết nối "$ USER" vào nhóm docker. Thay đổi tên người dùng để khớp với người dùng ưa thích của bạn nếu bạn không muốn sử dụng người dùng hiện tại của mình:
sudo gpasswd -a $USER docker
Hoặc thực hiện newgrp docker
hoặc đăng xuất / đăng nhập để kích hoạt các thay đổi cho các nhóm.
Bạn có thể dùng
docker run hello-world
để kiểm tra xem bạn có thể chạy docker mà không cần sudo không.