Score:1

ไม่สามารถสร้างคอนเทนเนอร์ Docker ที่มีไดรฟ์ข้อมูลติดตั้งจากไดเร็กทอรีที่ผู้ใช้สร้างขึ้นในรูทของโฮสต์ Ubuntu (EC2)

ธง in

ฉันต้องการสร้างคอนเทนเนอร์ Docker ซึ่งมีปริมาณการติดตั้งจากไดเร็กทอรีที่ผู้ใช้สร้างขึ้นในรูทของโฮสต์ Docker โฮสต์คืออินสแตนซ์ของ Ubuntu EC2

ข้อผิดพลาด

ฉันต้องการติดตั้ง /ข้อมูล ไดเรกทอรีด้านล่างในคอนเทนเนอร์ Docker แต่ฉันได้รับข้อผิดพลาดที่แสดง:

อูบุนตู:~$ ls -l /
รวม 120
drwxr-xr-x 25 รูท รูท 4096 10 ส.ค. 20:51 ./
drwxr-xr-x 25 รูท 4096 10 ส.ค. 20:51 ../
drwxr-xr-x 2 รูทรูท 4096 22 ก.ค. 13:50 bin/
drwxr-xr-x 3 รูท 4096 22 ก.ค. 13:50 boot/
drwxr-xr-x 4 ubuntu ubuntu 4096 10 ส.ค. 19:58 ข้อมูล /
...
drwxr-xr-x 8 รูทรูท 4096 30 พฤษภาคม 12:19 บ้าน /
...
drwxr-xr-x 3 รูทรูท 4096 20 มิ.ย. 13:39 น. /
...
drwxr-xr-x 12 รูทรูท 4096 12 มิ.ย. 01:03 usr/
ubuntu:~$ docker run -it --rm -v /data:/data อัลไพน์
นักเทียบท่า: การตอบสนองข้อผิดพลาดจาก daemon: ข้อผิดพลาดขณะสร้างเส้นทางเมานต์ซอร์ส '/data': mkdir /data: ระบบไฟล์แบบอ่านอย่างเดียว

คำสั่งเดียวกันนี้ใช้งานได้หากฉันใช้ไดเร็กทอรีที่มาพร้อมกับอินสแตนซ์ (เช่น /usr):

อูบุนตู:~$ docker run -it --rm -v /usr:/data alpine 
/ # ls /ข้อมูล
เกม bin รวมถึง lib lib32 local sbin share src

ข้อมูลเพิ่มเติม

ฉันได้รับข้อผิดพลาดเดียวกัน แม้ว่าฉันจะทำสิ่งต่อไปนี้:

  1. โดยใช้ --ภูเขา แทน -vแม้กระทั่งกับ อ่านเท่านั้น ตัวเลือก.
  2. ดำเนินการคำสั่งด้านบนด้วย ซูโด.
  3. เปลี่ยนสิทธิ์บน / และ ข้อมูล ไดเร็กทอรีไปที่ 777
  4. เปลี่ยนเจ้าของจาก อูบุนตู ถึง ราก
  5. เมานต์ไดเร็กทอรีย่อยเช่น /data/subdir.

เดอะ ดีเอฟ คำสั่งระบุว่าไม่มีการเมานต์พิเศษบนรูทของอินสแตนซ์:

อูบุนตู:~$ df -h
ขนาดระบบไฟล์ที่ใช้ Avail Use% Mounted on
อูเดฟ 7.9G 0 7.9G 0% /เดฟ
tmpfs 1.6G 872K 1.6G 1% /รัน
/dev/xvda1 194G 180G 14G 93% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /รัน/ล็อค
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/loop0 132M 132M 0 100% /snap/docker/796
/dev/loop2 25M 25M 0 100% /snap/amazon-ssm-agent/4046
/dev/loop3 56M 56M 0 100% /snap/core18/2128
/dev/loop1 100M 100M 0 100% /snap/core/11316
/dev/loop4 100M 100M 0 100% /snap/core/11420
/dev/loop5 56M 56M 0 100% /snap/core18/2074
/dev/loop6 34M 34M 0 100% /snap/amazon-ssm-agent/3552
s3fs 256T 0 256T 0% /นาที/วินาที
tmpfs 1.6G 0 1.6G 0% /รัน/ผู้ใช้/1000

docker daemon กำลังทำงานเป็น root:

อูบุนตู:~/$ ps -ef | grep นักเทียบท่า
รูท 964 1 1 19:49 ? 00:00:55 นักเทียบท่า --group นักเทียบท่า --exec-root=/run/snap.docker --data-root=/var/snap/docker/common/var-lib-docker --pidfile=/run/snap .docker/docker.pid --config-file=/var/snap/docker/796/config/daemon.json
รูท 1302 1 0 19:49 ? 00:00:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
อูบุนตู 6868 2649 0 21:20 pts/1 00:00:00 grep --color=auto dockerd

ขอบคุณล่วงหน้า. นี่เป็นปัญหาที่น่ารำคาญและฉันคิดว่ามันจะง่ายใน Docker และ AWS/EC2

Score:1
ธง cz

บันทึก: คำตอบนี้ใช้ได้กับ Ubuntu เท่านั้น (และการแจกแจงอนุพันธ์ในระดับหนึ่ง) ไม่ควรนำไปใช้กับ distro อื่น ๆ

ต้นตอของปัญหาคือคุณได้ติดตั้งและเรียกใช้ Docker อย่างรวดเร็ว และคนส่วนใหญ่ไม่ควรเรียกใช้ด้วยวิธีนี้ เมื่อโปรแกรมถูกจำกัดโดย snap start snapd จะสร้างคอนเทนเนอร์เพื่อรันโปรแกรม และเฉพาะไฟล์ที่สามารถเข้าถึงได้เมื่อเริ่มโปรแกรมเท่านั้นที่จะเข้าถึงโปรแกรมได้ ซึ่งรวมถึงไดเร็กทอรีใหม่ของคุณด้วย /ข้อมูลซึ่งไม่มีอยู่ใน snap container docker กำลังทำงานอยู่ ซึ่งเป็นสาเหตุที่นักเทียบท่าพยายาม (และล้มเหลว) ในการสร้างมันขึ้นมา

เวอร์ชันของนักเทียบท่าที่จัดส่งมาพร้อมกับ Ubuntu เองก็ไม่ควรใช้เช่นกัน เนื่องจากไม่ได้อัปเดตอยู่เสมอ (จริงๆ แล้วพวกเขาควรปรับปรุงหรือเลิกใช้ไปเลย แต่อย่าพึ่งคิดว่าจะเกิดขึ้นเร็ว ๆ นี้)

คนส่วนใหญ่ควรใช้ นักเทียบท่าจากที่เก็บ Docker อย่างเป็นทางการ เพื่อหลีกเลี่ยงปัญหาต่างๆ ที่เกิดขึ้นกับแพ็คเกจนักเทียบท่าของ Ubuntu

in flag
สิ่งนี้มีประโยชน์มาก เมื่อคุณพูดว่า "เมื่อโปรแกรมถูกจำกัดโดย snap เริ่มต้น snapd จะสร้างคอนเทนเนอร์เพื่อเรียกใช้โปรแกรม" ฉันหวังว่าถ้าฉันรีบูต Docker จะเห็นไดเร็กทอรีใหม่ (เช่น /data) อย่างไรก็ตามนั่นไม่ใช่กรณี อย่างไรก็ตาม จะใช้งานได้ถ้าฉันใส่ไดเร็กทอรีใน /mnt (เช่น /mnt/data) ทำไมถึงเป็นเช่นนี้? มีอะไรที่ฉันสามารถอ่านเพื่อช่วยให้ฉันเข้าใจ?
Michael Hampton avatar
cz flag
@mherzog ฉันคิดว่า snap มีรายการไดเรกทอรีเฉพาะที่จะเปิดเผยต่อโปรแกรมที่มีอยู่ แต่ตามกฎทั่วไปฉันหลีกเลี่ยงสแน็ป

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา