Làm thế nào để tôi Docker COPY là không root?


141

Trong khi xây dựng hình ảnh Docker, làm cách nào để COPYmột tệp vào hình ảnh để tệp kết quả được sở hữu bởi người dùng không phải là root?

Câu trả lời:


203

Đối với phiên bản v17.09.0-ce và mới hơn

Sử dụng các tùy chọn lá cờ --chown=<user>:<group>với một trong hai ADDhoặc COPYlệnh.

Ví dụ

COPY --chown=<user>:<group> <hostPath> <containerPath>

Tài liệu cho cờ --chown hiện có trên trang Tham khảo Dockerfile chính .

Số phát hành 34263 đã được hợp nhất và có sẵn trong phiên bản v17.09.0-ce .


Đối với các phiên bản cũ hơn v17.09.0-ce

Docker không hỗ trợ COPYnhư một người dùng khác ngoài root. Bạn cần phải chown/ chmodtập tin sau khi các COPYlệnh.

Ví dụ Dockerfile:

from centos:6
RUN groupadd -r myuser && adduser -r -g myuser myuser
USER myuser
#Install code, configure application, etc...
USER root
COPY run-my-app.sh /usr/local/bin/run-my-app.sh
RUN chown myuser:myuser /usr/local/bin/run-my-app.sh && \
    chmod 744 /usr/local/bin/run-my-app.sh
USER myuser
ENTRYPOINT ["/usr/local/bin/run-my-app.sh"]

Trước v17.09.0-ce, Tham chiếu Dockerfile cho COPYlệnh đã nói:

Tất cả các tệp và thư mục mới được tạo với UID và GID bằng 0.


Lịch sử Tính năng này đã được theo dõi thông qua nhiều vấn đề GitHub: 6119 , 9943 , 13600 , 27.303 , 28.499 , Issue 30.110 .

Vấn đề 34263 là vấn đề đã triển khai chức năng cờ tùy chọn và Vấn đề 467 đã cập nhật tài liệu.


3
Điều này thật đáng thất vọng, vì việc tìm kiếm rất nhiều tệp đã trở nên cực kỳ chậm vì lớp phủ2 đã trở thành trình điều khiển lưu trữ mặc định
hbogert

1
Đúng, bên cạnh đó, nó tạo ra một lớp hình ảnh phụ lớn mà không có lý do rõ ràng (trong trường hợp của tôi:> 300MB để chạy chowntrên 40 MB tệp).
Dirk

Có một lợi ích nữa khi chạy chown cùng với lệnh COPY là giảm kích thước. Nếu chúng ta chạy hai lệnh đó một cách riêng biệt (COPY <host_path> <source_path>; chown other_user: other_user) thì nó sẽ tạo thêm một lớp nữa làm tăng gấp đôi kích thước hình ảnh.
abhishek thakur

Câu trả lời này là một cứu cánh. Cảm ơn bạn rất nhiều, đã giải quyết một vấn đề tôi đã chiến đấu trong vài giờ.
Đồi Colby
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.