2015-03-05 18 views
21

Với Dockerfile sauDocker Sao chép và thay đổi chủ sở hữu

FROM ubuntu 
RUN groupadd mygroup 
RUN useradd -ms /bin/bash -G mygroup john 
MKDIR /data 
COPY test/ /data/test data 
RUN chown -R john:mygroup /data 
CMD /bin/bash 

Trong thư mục thử nghiệm của tôi, mà được sao chép tôi đã thiết lập cho phép tập tin để 770.

Nếu tôi làm một su john bên trong container của tôi, tôi không thể truy cập bất kỳ tệp hoặc thư mục con nào trong thư mục kiểm tra của tôi. Có vẻ như vấn đề này liên quan đến quyền sở hữu trong hệ thống tệp aufs, trong đó thư mục sao chép vẫn thuộc sở hữu của thư mục gốc và quyền được đặt thành 770.

Có cách giải quyết nào cho vấn đề này để đặt quyền không? Có thể đặt quyền của thư mục gốc thành uid của người dùng vùng chứa trước khi sao chép nó. Nhưng điều này có vẻ giống như một hack.

+0

trước 'COPY' và' MKDIR' tôi nghĩ bạn nên có 'USER john' – user2915097

+0

Có lẽ điều này có thể hiệu quả, nhưng tôi phải tạo cấu trúc thư mục hoàn chỉnh được sao chép và vì vậy điều này không được chấp nhận. –

Trả lời

4

Tôi nghĩ tôi đã tìm được giải pháp hoạt động. Sử dụng vùng chứa dữ liệu sẽ thực hiện thủ thuật. Trước tiên tôi tạo ra Sản lượng container dữ liệu, trong đó có chứa các bản sao của thư mục bên ngoài của tôi:

FROM busybox 
RUN mkdir /data 
VOLUME /data 
COPY /test /data/test 
CMD /bin/sh 

Trong thùng chứa ứng dụng của tôi, nơi tôi có người dùng của tôi, có thể giống như thế này

FROM ubuntu 
RUN groupadd mygroup 
RUN useradd -ms /bin/bash -G mygroup john 
COPY setpermissions.sh /root/setpermissions.sh 
CMD /root/setpermissions.sh && /bin/bash 

Các setpermissions kịch bản không được công việc của thiết lập các điều khoản sử dụng:

#!/bin/bash 

if [ ! -e /data/.bootstrapped ] ; then 
    chown -R john:mygroup /data 
    touch /data/.bootstrapped 
fi 

Bây giờ tôi chỉ phải sử dụng --volumes-from <myDataContainerId> khi chạy container ứng dụng.

+0

Điều này cũng giống như trước đây. Bạn nên xem xét chấp nhận câu trả lời khác là chính xác. Nó sử dụng một lá cờ docker chính thức cho nó mà không cần script. –

17

Một --chown cờ cuối cùng đã được thêm vào COPY:

COPY --chown=patrick hostPath containerPath 

cú pháp mới này dường như làm việc trên Docker 17.09.

Xem the PR để biết thêm thông tin.

+0

đối với tôi, nó đã hoạt động với '--chown = user: group', tôi đã có người dùng và nhóm được tạo trong vùng chứa – Charan

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