2015-05-05 29 views
13

Tôi đang sử dụng Docker (1.3.1) để xây dựng RPM bên trong một container:Docker tạo file root về khối lượng gắn

docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh 

này hoạt động tốt (người dùng của tôi là ở nhóm docker, vì vậy tôi don không cần phải sudo) và thả một tệp .rpm đã hoàn thành vào thư mục hiện tại. Vấn đề là các tập tin được tạo ra như là thuộc sở hữu của root.

Làm cách nào để sắp xếp tệp sao cho tệp được tạo bởi cùng một người dùng khi tôi chạy trình docker?

+0

"để các tập tin được tạo ra Sở hữu lại bởi cùng một người dùng khi tôi chạy docker với "Nhưng đây là root bên trong môi trường ảo docker, nó không biết người dùng của bạn là gì. –

+1

xem câu trả lời của tôi về câu hỏi này - http://stackoverflow.com/questions/27925006/using-host-environment-variables-with-dockerfile – ISanych

+0

@PaulOliver quy trình chạy trong vùng chứa Docker không biết người dùng máy chủ của tôi là gì, cũng giống như họ không biết nơi nào trên máy chủ tôi đã gắn ổ đĩa. Tuy nhiên, Docker không cho phép tôi chỉ định nơi lưu trữ khối lượng cuộc sống; tương tự, tôi có thể chỉ định những gì (máy chủ) người dùng tập tin mới được tạo ra như? –

Trả lời

1

Trình chạy Docker chạy dưới dạng root và không biết người dùng của bạn ở trong môi trường ảo của nó (ngay cả khi bạn đang ở trong nhóm sudoers). Nhưng bạn có thể tạo một người dùng không phải root trong khi xây dựng hình ảnh docker của bạn có thể được gọi là bất cứ điều gì bạn thích.

# create a non-root user named tester, 
# give them the password "tester" put them in the sudo group 
RUN useradd -d /home/tester -m -s /bin/bash tester && echo "tester:tester" | chpasswd && adduser tester sudo 

# start working in the "tester" home directory 
WORKDIR /home/tester 
COPY ./src 

# Make the files owned by tester 
RUN chown -R tester:tester /home/tester 

# Switch to your new user in the docker image 
USER tester 
+4

Tôi không quá lo lắng về ý tưởng của container về những gì người dùng bên trong container. Tuy nhiên, từ quan điểm của máy chủ, tôi muốn tệp kết thúc thuộc sở hữu của người dùng đã khởi chạy lệnh 'docker run'. Cách tiếp cận này có giúp ích gì cho điều đó không? –

+0

Tệp sẽ không thuộc sở hữu của bạn trừ khi bạn sao chép nó trở lại máy của bạn với cùng UID và GID. http://superuser.com/questions/580592/does-file-user-ownership-change-when-transferring-files-between-computers –

+0

Tôi đoán vậy. Tôi đã quen với câu chuyện đơn giản thao tác '/ vagrant' trên một máy ảo Vagrant: quan điểm của khách về chủ sở hữu tập tin là khác nhau đối với máy chủ. –

5

Bạn có thể cố gắng tạo ra (trong Dockerfile của một hình ảnh tùy chỉnh) một người sử dụng và thiết lập nó như là một trong những sử dụng bởi container

RUN adduser --system --group --shell /bin/sh auser \ 
&& mkdir /home/auser/bin 
USER auser 

Sau đó kiểm tra xem một docker run -v /home/matt/build:/build build-rpm gắn kết thư mục chia sẻ trong/xây dựng như auser.


Một tùy chọn khác nêu tại issue 2259:

Nếu bạn chown khối lượng (ở phía máy chủ) trước khi bind-lắp nó, nó sẽ làm việc.
Trong trường hợp đó, bạn có thể làm:

mkdir /tmp/www 
chown 101:101 /tmp/www 
docker run -v /tmp/www:/var/www ubuntu stat -c "%U %G" /var/www 

(Giả sử rằng 101:101UID:GID của người sử dụng www-data trong container của bạn.)

+1

Chú ý rằng các thư mục gốc (nếu có) sẽ thuộc về thư mục gốc. Trong ví dụ của bạn, không có, nhưng nó tốt để biết. –

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