ฉันจะทำ Docker COPY เป็นไม่ใช่รูทได้อย่างไร


153

ในขณะที่สร้างอิมเมจ Docker ฉันจะCOPYสร้างไฟล์ลงในอิมเมจได้อย่างไรเพื่อให้ไฟล์ผลลัพธ์เป็นของผู้ใช้อื่นที่ไม่ใช่รูท

คำตอบ:


221

สำหรับเวอร์ชัน v17.09.0-ce และใหม่กว่า

ใช้แฟล็กทางเลือก--chown=<user>:<group>กับคำสั่งADDorCOPY

ตัวอย่างเช่น

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

เอกสารประกอบสำหรับธง --chown คือตอนนี้อยู่บนหลักหน้า Dockerfile อ้างอิง

ฉบับที่34263ได้รับการรวมและสามารถใช้ได้ในการเปิดตัว v17.09.0-CE


สำหรับเวอร์ชันที่เก่ากว่า v17.09.0-ce

Docker ไม่รองรับCOPYในฐานะผู้ใช้อื่นที่ไม่ใช่รูท คุณจำเป็นต้องchown/ chmodไฟล์หลังจากCOPYคำสั่ง

ตัวอย่าง 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"]

ก่อนหน้า v17.09.0-ce การอ้างอิง Dockerfile สำหรับCOPYคำสั่งกล่าวว่า:

ไฟล์และไดเร็กทอรีใหม่ทั้งหมดสร้างขึ้นโดยมี UID และ GID เป็น 0


ประวัติความเป็นมา ที่นี้ได้รับการติดตามผ่านปัญหา GitHub หลาย: 6119 , 9943 , 13600 , 27303 , 28499 , ฉบับที่ 30110

ปัญหา 34263เป็นปัญหาที่ใช้ฟังก์ชันการตั้งค่าสถานะทางเลือกและปัญหา 467อัปเดตเอกสารประกอบ


3
นี่เป็นเรื่องที่น่าหงุดหงิดเนื่องจากการ chown-ing ไฟล์จำนวนมากกลายเป็นไฟล์ที่ช้าอย่างไม่น่าเชื่อเนื่องจากโอเวอร์เลย์ 2 ได้กลายเป็นไดร์เวอร์สตอเรจเริ่มต้น
hbogert

1
ใช่นอกจากนี้ยังสร้างเลเยอร์ภาพพิเศษขนาดใหญ่โดยไม่มีเหตุผลชัดเจน (ในกรณีของฉัน:> 300MB สำหรับการทำงานchownบนไฟล์ 40MB)
Dirk

1
มีประโยชน์อย่างหนึ่งสำหรับการเรียกใช้ chown พร้อมกับคำสั่ง COPY ซึ่งก็คือการลดขนาด หากเรารันคำสั่งสองคำสั่งนี้แยกกัน (COPY <host_path> <source_path>; chown other_user: other_user) มันจะสร้างเลเยอร์พิเศษขึ้นมาหนึ่งชั้นซึ่งในที่สุดจะเพิ่มขนาดรูปภาพเป็นสองเท่า
abhishek thakur

คำตอบนี้คือเครื่องช่วยชีวิต ขอบคุณมากแก้ไขปัญหาที่ฉันต่อสู้มาสองสามชั่วโมงแล้ว
Colby Hill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.