ฉันใช้alpine(หรือรูปภาพที่อิงจาก Alpine) เป็นรูปภาพพื้นฐานใน Dockerfile ฉันต้องเพิ่มคำแนะนำใดเพื่อสร้างผู้ใช้
ในที่สุดฉันจะใช้ผู้ใช้รายนี้เพื่อเรียกใช้แอปพลิเคชันที่ฉันจะวางลงในคอนเทนเนอร์เพื่อไม่ให้ผู้ใช้รูท
ฉันใช้alpine(หรือรูปภาพที่อิงจาก Alpine) เป็นรูปภาพพื้นฐานใน Dockerfile ฉันต้องเพิ่มคำแนะนำใดเพื่อสร้างผู้ใช้
ในที่สุดฉันจะใช้ผู้ใช้รายนี้เพื่อเรียกใช้แอปพลิเคชันที่ฉันจะวางลงในคอนเทนเนอร์เพื่อไม่ให้ผู้ใช้รูท
คำตอบ:
Alpine ใช้คำสั่งadduserและaddgroupสำหรับการสร้างผู้ใช้และกลุ่ม (แทนที่จะเป็นuseraddและusergroup)
FROM alpine:latest
# Create a group and user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# Tell docker that all future commands should run as the appuser user
USER appuser
แฟล็กสำหรับadduserคือ:
การใช้งาน: adduser [OPTIONS] USER [GROUP]
สร้างผู้ใช้ใหม่หรือเพิ่ม USER ใน GROUP
-h DIR โฮมไดเร็กทอรี
-g ฟิลด์ GECOS GECOS
-s เชลล์เข้าสู่ระบบเชลล์
-G GRP กลุ่ม
-S สร้างผู้ใช้ระบบ
-D อย่ากำหนดรหัสผ่าน
-H อย่าสร้างโฮมไดเร็กทอรี
-u UID รหัสผู้ใช้
-k ไดเรกทอรีโครงกระดูก SKEL (/ etc / skel)
USER guest?
adduserและaddgroupคำสั่งที่มีความแตกต่างจากadduserและaddgroupให้เป็นไปตาม Debian และ Ubuntu ซึ่งจะเป็นปลายด้านหน้าและuseradd groupaddโดยเฉพาะอย่างยิ่งคำสั่ง Debian และ Ubuntu รองรับตัวเลือกแบบยาวเท่านั้น ดู: manpages.debian.org/stretch/adduser/adduser.8.en.html
คำสั่งคือadduserและaddgroup.
นี่คือเทมเพลตสำหรับ Docker ที่คุณสามารถใช้ได้ในสภาพแวดล้อม busybox (อัลไพน์) รวมถึงสภาพแวดล้อมที่ใช้ Debian (Ubuntu ฯลฯ ):
ENV USER=docker
ENV UID=12345
ENV GID=23456
RUN adduser \
--disabled-password \
--gecos "" \
--home "$(pwd)" \
--ingroup "$USER" \
--no-create-home \
--uid "$UID" \
"$USER"
สังเกตสิ่งต่อไปนี้:
--disabled-password ป้องกันไม่ให้แจ้งรหัสผ่าน--gecos "" หลีกเลี่ยงการแจ้ง "ชื่อเต็ม" ฯลฯ บนระบบที่ใช้ Debian--home "$(pwd)"ตั้งค่าบ้านของผู้ใช้เป็น WORKDIR คุณอาจไม่ต้องการสิ่งนี้--no-create-home ป้องกันการคัดลอก cruft ไปยังไดเร็กทอรีจาก /etc/skelคำอธิบายการใช้งานสำหรับแอ็พพลิเคชันเหล่านี้ไม่มีแฟล็กแบบยาวที่มีอยู่ในโค้ดสำหรับadduserและaddgroup addgroup
แฟล็กแบบยาวต่อไปนี้ควรใช้ได้ทั้งในอัลไพน์และเดเบียน - อนุพันธ์:
BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.
Usage: adduser [OPTIONS] USER [GROUP]
Create new user, or add USER to GROUP
--home DIR Home directory
--gecos GECOS GECOS field
--shell SHELL Login shell
--ingroup GRP Group (by name)
--system Create a system user
--disabled-password Don't assign a password
--no-create-home Don't create home directory
--uid UID User id
สิ่งหนึ่งที่ควรทราบก็คือถ้า --ingroupไม่ได้ตั้งค่า GID จะถูกกำหนดให้ตรงกับ UID หาก GID ที่ตรงกับ UID ที่ระบุมีอยู่แล้ว adduser จะล้มเหลว
BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.
Usage: addgroup [-g GID] [-S] [USER] GROUP
Add a group or add a user to a group
--gid GID Group id
--system Create a system group
ฉันค้นพบทั้งหมดนี้ในขณะที่พยายามเขียนทางเลือกของตัวเองให้กับโครงการfixuidสำหรับการเรียกใช้คอนเทนเนอร์เป็นโฮสต์ UID / GID
สคริปต์ตัวช่วยจุดเริ่มต้นของฉันสามารถพบได้ใน GitHub
จุดประสงค์คือเพื่อนำหน้าสคริปต์นั้นเป็นอาร์กิวเมนต์แรกENTRYPOINTที่ควรทำให้ Docker อนุมาน UID และ GID จากการเชื่อมโยงที่เกี่ยวข้อง
อาจต้องใช้ตัวแปรสภาพแวดล้อม "TEMPLATE" เพื่อกำหนดว่าควรจะอนุมานสิทธิ์จากที่ใด
(ตอนที่เขียนฉันไม่มีเอกสารสำหรับสคริปต์ของฉันมันยังอยู่ในรายการสิ่งที่ต้องทำ !!)
USER 405ซึ่งเป็นผู้ใช้ทั่วไปภายใน Alpine Linux