Hệ điều hành máy chủ: Bản phát hành Red Hat Enterprise Linux Server 7.9 (Maipo)
hệ điều hành khách tức là một Docker container đang chạy: OpenSuse 15.2
Phiên bản docker (trên máy chủ): Phiên bản docker 19.03.5, xây dựng 633a0ea
Trên máy chủ, khi tôi git sao chép kho lưu trữ "utilities_scripts", tôi có quyền truy cập hợp lệ cho người dùng (do ô).
- Tôi nghĩ vấn đề ở đây không liên quan đến quyền nhưng TẠI SAO NGƯỜI DÙNG được xác định trong Dockerfile không được đặt làm chủ sở hữu của các thư mục/tệp (đang được gắn kết) bên trong bộ chứa docker, khi tôi phát hành như sau
docker chạy ...
chỉ huy. Đặt 755/775, v.v. không phải là một tùy chọn vì tôi không thể chọn bên trong vùng chứa với tư cách là người dùng docker mục tiêu và đặt 777 là một cách làm không tốt.
GHI CHÚ:
- Khi tôi thử cùng một hình ảnh docker từ một máy Linux khác, thư mục/tệp được gắn với tư cách là người dùng "docker_non_root_user" được định nghĩa trong Dockerfile là
NGƯỜI DÙNG docker_non_root_user
.
xây dựng docker ...
chạy thành công và tạo một hình ảnh, và bộ chứa hoạt động trên một máy khác (khi tôi gắn git clone repos bên trong bộ chứa bằng cách sử dụng -v <máy chủ>:<thùng chứa>
cú pháp tùy chọn docker CLI.
đoạn mã từ Dockerfile là:
# Xác định bất kỳ tham chiếu điểm gắn kết nào
KHỐI LƯỢNG ["/home/docker_non_root_user/git"]
NGƯỜI DÙNG docker_non_root_user
WORKDIR /home/docker_non_root_user/git
Đây là những gì tôi thấy trên máy chủ nơi tôi có Dockerfile NGƯỜI DÙNG ...
Vấn đề sở hữu:
[gigauser@jenkins-projectABC bitbucket_workspace]$ whoami
gigauser
[gigauser@jenkins-projectABC bitbucket_workspace]$ id
uid=gigauser(gigauser) gid=21520(jenkins) nhóm=21520(jenkins),3000(ectx)
[gigauser@jenkins-projectABC bitbucket_workspace]$ umask
0077
[gigauser@jenkins-projectABC bitbucket_workspace]$ ls -l
tổng số 12
drwx------ 5 gigauser jenkins 4096 ngày 3 tháng 2 16:36 tiện ích_scripts
[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker image ls
Mật khẩu thư mục hoạt động:
ID HÌNH ẢNH THẺ KHO KÍCH THƯỚC TẠO
project-im-opensuse 15.2 0c9ee31464cd 43 giờ trước 2,39GB
[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker run -v $PWD/utilities_scripts:/home/docker_non_root_user/git/utilities_scripts/ -it project-im-opensuse:15.2 bash -c "whoami; id; which bash; bash - -version; ls -l; echo; ls -l utility_scripts; ls -l /home/docker_non_root_user/git/utilities_scripts; id gigauser; echo"
CẢNH BÁO: Chuyển tiếp IPv4 bị tắt. Mạng sẽ không hoạt động.
docker_non_root_user
uid=1000(docker_non_root_user) gid=487(docker_non_root_user) nhóm=487(docker_non_root_user),100(người dùng)
/bin/bash
GNU bash, phiên bản 4.4.23(1)-phát hành (x86_64-suse-linux-gnu)
Bản quyền (C) 2016 Tổ chức Phần mềm Miễn phí, Inc.
Giấy phép GPLv3+: GNU GPL phiên bản 3 trở lên <http://gnu.org/licenses/gpl.html>
Đây là phần mềm miễn phí; bạn được tự do thay đổi và phân phối lại nó.
KHÔNG CÓ BẢO ĐẢM, trong phạm vi pháp luật cho phép.
tổng số 8
drwx------ 5 gigauser 21520 4096 ngày 4 tháng 2 00:36 tiện ích_scripts
ls: không thể mở thư mục 'utilities_scripts': Quyền bị từ chối
ls: không thể mở thư mục '/home/docker_non_root_user/git/utilities_scripts': Quyền bị từ chối
id: 'gigauser': không có người dùng như vậy
[gigauser@jenkins-projectABC bitbucket_workspace]$
Khi tôi chạy lệnh tương tự trên máy Linux khác, tôi thấy tệp được gắn tiện ích_scripts
chủ sở hữu của thư mục là docker_non_root_user
.
Câu hỏi: TẠI SAO Tôi thấy USER-ID của người dùng máy chủ (nơi tôi đang chạy docker chạy lệnh) đang được đặt bên trong bộ chứa docker trên thư mục tiện ích_scripts, khi không có ID người dùng nào được tạo trong Dockerfile/tồn tại bên trong vùng chứa? (xem dòng cuối cùng thứ 2 trong đầu ra ở trên). Nó hiện đang nhận được các quyền cấp thư mục và chủ sở hữu của cùng một máy chủ lưu trữ bên trong bộ chứa docker.
gigauser
tức là người dùng của Máy chủ, không có trong bộ chứa docker mà là tệp ls -l
đầu ra cho thấy gigauser
là chủ sở hữu của tiện ích_scripts
thư mục/tệp trong vùng chứa. Sự cố này không xảy ra trên máy chủ khác.
Tôi thậm chí đã kiểm tra /etc/subuid
tập tin, có vẻ ổn với tôi. Thay đổi giá trị bên trong thành người dùng của docker không giúp được gì. Ngoài ra tôi không thấy bất cứ điều gì liên quan đến điều này trong /etc/docker/daemon.json
tập tin.
$ cat /etc/subuid
gigauser:165536:65536
Chạy giống nhau docker chạy .... tùy chọn
lệnh ở trên từ máy chủ Linux khác, nó hiển thị quyền sở hữu thư mục bên trong bộ chứa docker dưới dạng:
drwx------ 5 docker_non_root_user 1000 272 Ngày 26 tháng 1 21:52 tiện ích_scripts