ฉันใช้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