นักเทียบท่าเมาท์วอลุ่มแบบอ่านอย่างเดียว


109

ฉันกำลังทำงานกับ Docker และฉันต้องการเมานต์โฟลเดอร์ไดนามิกที่เปลี่ยนไปมาก (ดังนั้นฉันจะไม่ต้องสร้างอิมเมจ Docker สำหรับการเรียกใช้งานแต่ละครั้งซึ่งจะเสียค่าใช้จ่ายสูงเกินไป) แต่ฉันต้องการให้โฟลเดอร์นั้นเป็นแบบอ่านอย่างเดียว . การเปลี่ยนเจ้าของโฟลเดอร์เป็นคนอื่นใช้งานได้ อย่างไรก็ตามchownจำเป็นต้องมีrootการเข้าถึงซึ่งฉันไม่ต้องการเปิดเผยกับแอปพลิเคชัน

เมื่อฉันใช้-vแฟล็กเพื่อเมานต์มันจะให้ชื่อผู้ใช้อะไรก็ตามที่ฉันให้ฉันสร้างผู้ใช้ที่ไม่ใช่รูทภายในอิมเมจนักเทียบท่าอย่างไรก็ตามไฟล์ทั้งหมดในโวลุ่มโดยมีเจ้าของเป็นผู้ใช้ที่รันนักเทียบท่าเปลี่ยนเป็นผู้ใช้ I ให้จากบรรทัดคำสั่งดังนั้นฉันจึงไม่สามารถสร้างไฟล์และโฟลเดอร์แบบอ่านอย่างเดียวได้ ฉันจะป้องกันสิ่งนี้ได้อย่างไร?

ฉันเพิ่มเข้าไปmustafa ALL=(docker) NOPASSWD: /usr/bin/dockerด้วยดังนั้นฉันจึงสามารถเปลี่ยนเป็นผู้ใช้รายอื่นผ่านเทอร์มินัลได้ แต่ไฟล์ยังมีสิทธิ์สำหรับผู้ใช้ของฉัน


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

คำตอบ:


173

คุณสามารถระบุได้ว่าปริมาณที่ควรจะอ่านอย่างเดียวโดยการผนวก:roกับ-vสวิทช์:

docker run -v volume-name:/path/in/container:ro my/image

โปรดสังเกตว่าโฟลเดอร์นั้นเป็นแบบอ่านอย่างเดียวในคอนเทนเนอร์และอ่าน - เขียนบนโฮสต์

2018 แก้ไข

ตามเอกสารใช้ไดรฟ์ข้อมูลขณะนี้มีอีกวิธีหนึ่งในการต่อเชื่อมไดรฟ์ข้อมูลโดยใช้--mountสวิตช์ นี่คือวิธีใช้สิ่งนั้นด้วยการอ่านอย่างเดียว:

$ docker run --mount source=volume-name,destination=/path/in/container,readonly my/image

นักเทียบท่าเขียน

นี่คือตัวอย่างวิธีระบุคอนเทนเนอร์แบบอ่านอย่างเดียวในdocker-compose:

version: "3"
services:
  redis:
    image: redis:alpine
    read_only: true

8
มีการอนุญาตให้เขียน แต่ไม่เขียนกลับไปที่โฮสต์หรือไม่ มันจะยอดเยี่ยมมาก
Ray Foss

9
ดูเหมือนว่าคุณไม่ต้องการระบุระดับเสียงเลย
Alp

1
เรียงลำดับจาก ... ฉันไม่ต้องการสร้างอิมเมจเพียงเพื่อใช้ประโยชน์จาก Dockerfile COPY หรือใช้docker cpคำสั่งแยกต่างหากในคอนเทนเนอร์ปิด
Ray Foss

5
บางทีคุณอาจตั้งคำถามใหม่ว่าคุณให้รายละเอียดเพิ่มเติมและเชื่อมโยงมาที่นี่ได้อย่างไร
Alp

1
คุณยังสามารถใช้ไวยากรณ์สั้น ๆ กับนักเทียบท่าได้เช่นredis:alpine:ro
mb14

25

นักเทียบท่าเขียน

นี่คือวิธีที่เหมาะสมในการระบุไดรฟ์ข้อมูลแบบอ่านอย่างเดียวในdocker-compose:

version: "3.2" # Use version 3.2 or above
services:
  my_service:
    image: my:image
    volumes:
      - type: volume
        source: volume-name
        target: /path/in/container
        read_only: true
volumes:
  volume-name:

https://docs.docker.com/compose/compose-file/#long-syntax-3


2
เป็นเรื่องที่เหมาะสมจริง ๆ แต่สิ่งที่อ่านอย่างเดียวในที่นี้คือปริมาตรไม่ใช่คอนเทนเนอร์
КонстантинВан

สิ่งนี้ใช้ได้กับฉันเท่านั้นversion: "3.2"- ขอบคุณ :)
Davey

3
คุณยังสามารถทำ- './my-file.txt:/container-readonly-file.txt:ro'ภายใต้volumes- สังเกต:roตอนท้าย
rybo111
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.