2014-09-15 18 views
108

Thông thường, các thùng chứa docker được chạy bằng cách sử dụng người dùng root. Tôi muốn sử dụng một người dùng khác, điều này không có vấn đề khi sử dụng chỉ thị USER của docker. Nhưng người dùng này sẽ có thể sử dụng sudo bên trong vùng chứa. Lệnh này bị thiếu.Sử dụng sudo bên trong hộp chứa đế lót

Dưới đây là một Dockerfile đơn giản cho mục đích này:

FROM ubuntu:12.04 

RUN useradd docker && echo "docker:docker" | chpasswd 
RUN mkdir -p /home/docker && chown -R docker:docker /home/docker 

USER docker 
CMD /bin/bash 

Chạy chứa này, tôi thường xuyên bị thoát với người dùng Docker '. Khi tôi cố gắng sử dụng sudo, lệnh không được tìm thấy. Vì vậy, tôi đã cố gắng để cài đặt sudo gói bên trong Dockerfile tôi sử dụng

RUN apt-get install sudo 

Điều này dẫn đến Không thể xác định vị trí gói sudo

Tôi không biết làm thế nào để quản lý này. Bất kỳ đề xuất? Cảm ơn nhiều!

+0

Chỉ cần cung cấp nhóm sudo cho người dùng. http://askubuntu.com/questions/7477/how-can-i-add-a-new-user-as-sudoer-using-the-command-line – Regan

Trả lời

127

Chỉ cần có nó. Như regan đã chỉ ra, tôi phải thêm người dùng vào nhóm sudoers. Nhưng lý do chính là tôi đã quên để cập nhật bộ đệm kho lưu trữ, vì vậy apt-get không thể tìm thấy gói sudo. Nó đang làm việc bây giờ. Đây là mã hoàn chỉnh:

FROM ubuntu:12.04 

RUN apt-get update && \ 
     apt-get -y install sudo 

RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo 

USER docker 
CMD /bin/bash 
+6

không hoạt động theo centos. lệnh 'adduser' tiết kiệm trợ giúp sử dụng cho' useradd' – Emad

+0

Đối với CentOS, bạn có thể thêm một người dùng và nhóm, sau đó tạo một tệp shard trong '/ etc/sudoers.d /' và đặt quyền cho '440' trên tập tin đó. Sau đó, người dùng sẽ có quyền truy cập sudo theo CentOS, 6 trở lên. 5 bạn sẽ phải thêm chỉ thị '#includedir/etc/sudoers.d' vào trong'/etc/sudoers' – Pred

+43

Đối với bất kỳ ai gặp vấn đề này với vùng chứa hiện có, và chúng không nhất thiết muốn xây dựng lại, hãy kết nối với vùng chứa bằng cách sử dụng 'docker exec -ti -u root container_name bash' để kết nối với các thư mục gốc. – Chris

4

Các câu trả lời khác không hiệu quả đối với tôi. Tôi tiếp tục tìm kiếm và tìm thấy một số blog post đã trình bày cách một nhóm hoạt động không phải là người chủ bên trong một vùng chứa docker.

Đây là TL; DR phiên bản:

RUN apt-get update 
RUN apt-get install sudo 

RUN adduser --disabled-password --gecos '' docker 
RUN adduser docker sudo 
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers 

USER docker 

# this is where I was running into problems with the other approaches 
RUN sudo apt-get update 

Tôi đã sử dụng FROM node:9.3 cho điều này, nhưng tôi nghi ngờ rằng căn cứ chứa tương tự khác sẽ làm việc là tốt.

Các vấn đề liên quan