ระบบปฏิบัติการโฮสต์: การเปิดตัว Red Hat Enterprise Linux Server 7.9 (ไมโป)
ระบบปฏิบัติการแขก เช่นคอนเทนเนอร์ Docker ที่ทำงาน: OpenSuse 15.2
เวอร์ชันนักเทียบท่า (บนโฮสต์): นักเทียบท่าเวอร์ชัน 19.03.5สร้าง 633a0ea
บนโฮสต์ เมื่อฉัน git โคลนที่เก็บ "utilities_scripts" ฉันมีสิทธิ์เข้าถึงที่ถูกต้องสำหรับผู้ใช้ (เนื่องจาก umask)
- ฉันคิดว่าปัญหาที่นี่ไม่เกี่ยวข้องกับการอนุญาต แต่ทำไมผู้ใช้ที่กำหนดใน Dockerfile ไม่ได้รับการตั้งค่าให้เป็นเจ้าของโฟลเดอร์/ไฟล์ (ซึ่งกำลังเมานต์) ภายในคอนเทนเนอร์นักเทียบท่า เมื่อฉันออกสิ่งต่อไปนี้
นักเทียบท่ารัน ...
สั่งการ. การตั้งค่า 755/775 ฯลฯ ไม่ใช่ตัวเลือกเนื่องจากฉันไม่สามารถ chown ภายในคอนเทนเนอร์ได้เนื่องจากผู้ใช้นักเทียบท่าเป้าหมายและการตั้งค่า 777 เป็นวิธีปฏิบัติที่ไม่ดี
บันทึก:
- เมื่อฉันลองใช้อิมเมจนักเทียบท่าเดียวกันจากเครื่อง Linux เครื่องอื่น โฟลเดอร์/ไฟล์จะถูกเมาท์เป็นผู้ใช้ "นักเทียบท่า_non_root_user" ซึ่งกำหนดไว้ใน Dockerfile เป็น
USER นักเทียบท่า_non_root_user
.
สร้างนักเทียบท่า ...
ทำงานสำเร็จและสร้างอิมเมจ และคอนเทนเนอร์ทำงานบนเครื่องอื่น (เมื่อฉันติดตั้ง git clone repos ภายในคอนเทนเนอร์โดยใช้ -v <โฮสต์>:<คอนเทนเนอร์>
ไวยากรณ์ตัวเลือกนักเทียบท่า CLI
ข้อมูลโค้ด จาก Dockerfile คือ:
# กำหนดการอ้างอิงจุดเชื่อมต่อใด ๆ
ปริมาณ ["/home/docker_non_root_user/git"]
USER นักเทียบท่า_non_root_user
เวิร์กดีอาร์ /home/docker_non_root_user/git
นี่คือสิ่งที่ฉันเห็นบนโฮสต์ที่ฉันมี Dockerfile ผู้ใช้ ...
ปัญหาความเป็นเจ้าของ:
[gigauser@jenkins-projectABC bitbucket_workspace]$ whoami
กิกะเซอร์
[gigauser@jenkins-projectABC bitbucket_workspace]รหัส $
uid=gigauser(gigauser) gid=21520(เจนกินส์) กลุ่ม=21520(เจนกินส์),3000(ectx)
[gigauser@jenkins-projectABC bitbucket_workspace]$ umask
0077
[gigauser@jenkins-projectABC bitbucket_workspace]$ ls -l
รวม 12
drwx------ 5 gigauser เจนกินส์ 4096 3 ก.พ. 16:36 utilities_scripts
[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$ รูปภาพ sudo docker ls
รหัสผ่านไดเรกทอรีที่ใช้งานอยู่:
รหัสภาพแท็กพื้นที่เก็บข้อมูลที่สร้างขนาด
project-im-opensuse 15.2 0c9ee31464cd 43 ชั่วโมงที่แล้ว 2.39GB
[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker run -v $PWD/utilities_scripts:/home/docker_non_root_user/git/utilities_scripts/ -it project-im-opensuse:15.2 bash -c "whoami; id; which bash; bash - -version; ls -l; echo; ls -l utilities_scripts; ls -l /home/docker_non_root_user/git/utilities_scripts; id gigauser; echo"
คำเตือน: การส่งต่อ IPv4 ถูกปิดใช้งาน ระบบเครือข่ายจะไม่ทำงาน
นักเทียบท่า_non_root_user
uid=1000(docker_non_root_user) gid=487(docker_non_root_user) groups=487(docker_non_root_user),100(ผู้ใช้)
/ถัง/ทุบตี
GNU bash รุ่น 4.4.23(1)-release (x86_64-suse-linux-gnu)
ลิขสิทธิ์ (C) 2016 Free Software Foundation, Inc.
ใบอนุญาต GPLv3+: GNU GPL เวอร์ชัน 3 หรือใหม่กว่า <http://gnu.org/licenses/gpl.html>
นี่เป็นซอฟต์แวร์ฟรี คุณมีอิสระที่จะเปลี่ยนและแจกจ่ายซ้ำ
ไม่มีการรับประกันตามขอบเขตที่กฎหมายอนุญาต
รวม 8
drwx------ 5 gigauser 21520 4096 4 ก.พ. 00:36 utilities_scripts
ls: ไม่สามารถเปิดไดเรกทอรี 'utilities_scripts': ปฏิเสธการอนุญาต
ls: ไม่สามารถเปิดไดเรกทอรี '/home/docker_non_root_user/git/utilities_scripts': ปฏิเสธการอนุญาต
id: 'gigauser': ไม่มีผู้ใช้ดังกล่าว
[gigauser@jenkins-projectABC bitbucket_workspace]$
เมื่อฉันเรียกใช้คำสั่งเดียวกันบนเครื่อง Linux เครื่องอื่น ฉันเห็นการเมานท์ ยูทิลิตี้_สคริปต์
เจ้าของโฟลเดอร์คือ นักเทียบท่า_non_root_user
.
คำถาม: ทำไม ฉันเห็น USER-ID ของผู้ใช้โฮสต์ (ที่ฉันใช้งานอยู่ เรียกใช้นักเทียบท่า คำสั่ง) กำลังได้รับการตั้งค่าภายในคอนเทนเนอร์นักเทียบท่าในโฟลเดอร์ ยูทิลิตี้_สคริปต์เมื่อไม่มีการสร้าง ID ผู้ใช้ดังกล่าวใน Dockerfile/มีอยู่ภายในคอนเทนเนอร์ (ดูบรรทัดสุดท้ายที่ 2 ในผลลัพธ์ด้านบนด้านบน) ขณะนี้ได้รับสิทธิ์เจ้าของโฮสต์และระดับโฟลเดอร์เดียวกันภายในคอนเทนเนอร์นักเทียบท่า
กิกะเซอร์
เช่น ผู้ใช้ของโฮสต์ ไม่มีอยู่ในคอนเทนเนอร์นักเทียบท่า แต่เป็นไฟล์ ls -l
แสดงผลลัพธ์ กิกะเซอร์
เป็นเจ้าของ ยูทิลิตี้_สคริปต์
โฟลเดอร์/ไฟล์ในคอนเทนเนอร์ ปัญหานี้ไม่ได้เกิดขึ้นกับเครื่องโฮสต์อื่น
ฉันยังตรวจสอบ /etc/subuid
ไฟล์ดูดีสำหรับฉัน การเปลี่ยนค่าภายในเป็นผู้ใช้นักเทียบท่าไม่ได้ช่วยอะไร นอกจากนี้ฉันไม่เห็นอะไรที่เกี่ยวข้องกับสิ่งนี้ใน /etc/docker/daemon.json
ไฟล์.
$cat /etc/subuid
กิกะเซอร์:165536:65536
วิ่งเหมือนกัน นักเทียบท่าเรียกใช้ .... ตัวเลือก
คำสั่งด้านบนจากเครื่องโฮสต์ Linux อื่น ๆ จะแสดงความเป็นเจ้าของโฟลเดอร์ภายในคอนเทนเนอร์นักเทียบท่าเป็น:
drwx------ 5 docker_non_root_user 1,000 272 26 ม.ค. 21:52 utilities_scripts