Tôi đã tạo một Dockerfile, sử dụng userid hiện tại của tôi để chạy ứng dụng sao cho bộ chứa docker đang chạy với cùng quyền của người dùng hiện tại của tôi, xem xét bộ chứa gắn thư mục của máy chủ để thực hiện tác vụ.
Tôi không root cho hệ thống Máy chủ (cục bộ) của mình. Để làm cho cuộc sống của tôi dễ dàng hơn, tôi cũng thêm nhóm root, sudo vào tài khoản này của hình ảnh Docker, vì vậy tôi có thể thực hiện tác vụ sudo để cài đặt mọi thứ.
Đây là một phần của Dockerfile:
(Ubuntu 18.04)
ARG USERNAME='kiểm tra'
UID ARG=1000
ARGGID=1000
CHẠY apt-get update && apt-get install -yq openssh-server sudo
RUN groupadd -g nhóm gỡ lỗi $GID
CHẠY useradd -rm -d /home/$USERNAME -s /bin/bash -u $UID -g $GID -G wheel $USERNAME
CHẠY echo $USERNAME:test | chpasswd
Khi tôi xây dựng hình ảnh docker, tôi sử dụng
docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) --build-arg USERNAME=$(whoami) .
để chuyển tên người dùng và userid của tôi
và khi tôi chạy docker image (để tạo docker container), tôi cũng sử dụng
docker run --detach -u $(id -u):$(id -g)
Tất cả đều tốt cho đến thời điểm này. Khi tôi sử dụng 'docker exec -it xxx bash' để đăng nhập vùng chứa này, tên người dùng của tôi là chính xác (ben), tên người dùng của tôi là chính xác (10023). id -G
cho thấy tôi thuộc 3 nhóm: 10001 (nhóm gỡ lỗi), 0 (root), 27 (sudo)
10001 là id nhóm thực của tôi nếu tôi chạy id -g
trong máy chủ.
Đây là sự thay đổi:
Trong máy chủ, ngoài nhóm 10001, tôi còn là thành viên của nhóm 10022 và 10033, vì vậy tôi có quyền đối với một số thư mục cụ thể. Bây giờ trong vùng chứa, vì người dùng không ở trong 10022 và 10033, tôi không thể truy cập vào thư mục này.
Vì vậy, tôi đã thay đổi docker chạy
lệnh để:
docker run --detach -u $(id -u):$(id -g) $(id -G | sed -e 's/\</--group-add /g')
Nó thực sự đang hoạt động và tôi có thể truy cập vào thư mục của mình ngay bây giờ.
id -G
cho thấy tôi thuộc 3 nhóm: 10001 (nhóm gỡ lỗi), 10022 (no name), 10033 (no name)
Nhưng mà:
Tôi không còn là thành viên của sudo và root nữa. Điều thú vị là, con mèo/etc/nhóm
cho thấy rằng tôi vẫn ở trong sudo và nhóm gốc, nhưng tôi không được phép sudo nữa.
ben@a1559a984ac0:/$ grep ben /etc/group
gốc:x:0:ben
sudo:x:27:ben
ben@a1559a984ac0:/$ sudo ls
[sudo] mật khẩu cho ben:
ben không có trong tệp sudoers. Sự cố này sẽ được báo cáo.
Có một số bài đăng trên StackExchange nói về Sự khác biệt về nhóm, nhưng tôi không thấy giải pháp cho vấn đề này: Tài khoản của tôi nằm trong/etc/group, nhưng không nằm trong "nhóm" và "id -G". Tại sao " --group-add " của docker chạy
lệnh xóa nhóm hiện có mà tôi đã tham gia?
Tôi đoán tôi có thể viết mã cứng " --group-add 0 " để tự thêm mình vào thư mục gốc, nhưng điều này vẫn gây khó chịu (không thanh lịch). Bất cứ đề nghị nào?
Tệp docker dành cho Ubuntu 18.04, nhưng tôi đoán nó không liên quan đến phiên bản.