Docker, gắn kết các tập dưới dạng chỉ đọc


106

Tôi đang làm việc với Docker và tôi muốn gắn một thư mục động thay đổi nhiều (vì vậy tôi sẽ không phải tạo hình ảnh Docker cho mỗi lần thực thi, điều này sẽ quá tốn kém), nhưng tôi muốn thư mục đó ở chế độ chỉ đọc . Thay đổi chủ sở hữu thư mục thành một người khác hoạt động. Tuy nhiên, chownyêu cầu rootquyền truy cập, mà tôi không muốn tiếp xúc với ứng dụng.

Khi tôi sử dụng -vcờ để gắn kết, nó sẽ cung cấp bất kỳ tên người dùng nào mà tôi cung cấp, tôi đã tạo người dùng không phải root bên trong hình ảnh docker, tuy nhiên, tất cả các tệp trong ổ đĩa với chủ sở hữu là người dùng đã chạy docker, thay đổi thành người dùng tôi cung cấp từ dòng lệnh, vì vậy tôi không thể tạo các tệp và thư mục chỉ đọc. Làm thế nào tôi có thể ngăn chặn điều này?

Tôi cũng đã nói thêm mustafa ALL=(docker) NOPASSWD: /usr/bin/docker, vì vậy tôi có thể thay đổi thành người dùng khác thông qua thiết bị đầu cuối, nhưng các tệp vẫn có quyền cho người dùng của tôi.


Tôi chỉ nghĩ rằng tôi sẽ để lại một bình luận ở đây nói rằng việc cho phép người dùng chạy bộ chứa docker giống như cấp cho anh ta quyền truy cập root đầy đủ. Điều này cũng được ghi lại trong phần bảo mật của tài liệu docker.
Blackclaws

Câu trả lời:


170

Bạn có thể chỉ định rằng một tập phải ở chế độ chỉ đọc bằng cách thêm :rovào -vnút chuyển:

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

Lưu ý rằng thư mục sau đó ở chế độ chỉ đọc trong vùng chứa và đọc-ghi trên máy chủ.

2018 Chỉnh sửa

Theo tài liệu Sử dụng khối lượng , giờ đây có một cách khác để gắn khối lượng bằng cách sử dụng công --mounttắc. Đây là cách sử dụng điều đó với chế độ chỉ đọc:

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

docker-soạn

Dưới đây là một ví dụ về cách chỉ định vùng chứa chỉ đọc trong docker-compose:

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

8
có cho phép ghi, nhưng không ghi chúng sao lưu vào máy chủ lưu trữ? đó sẽ là tuyệt vời
Ray Foss

9
Điều đó có vẻ như bạn không muốn chỉ định âm lượng nào cả.
Alps,

1
Đại loại là ... Tôi không thích phải xây dựng một hình ảnh chỉ để sử dụng Dockerfile COPY hoặc sử dụng một docker cplệnh riêng biệt trên một vùng chứa tắt.
Ray Foss

5
Có thể bạn có thể tạo một câu hỏi mới cho câu hỏi mà bạn cung cấp thêm chi tiết và liên kết nó ở đây?
Alps

Bạn cũng có thể sử dụng cú pháp ngắn với redis:alpine:ro
docker

23

docker-soạn

Đây là một cách thích hợp để chỉ định tập chỉ đọc trong 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
Nó thực sự phù hợp, nhưng những gì ở đây là chỉ đọc là một tập, không phải một thùng chứa.
Константин Ван

Điều này chỉ phù hợp với tôi với version: "3.2"- Cảm ơn :)
Davey

"Đã thêm ở định dạng tệp phiên bản 3.2." vâng
rybo111

3
Bạn cũng có thể làm - './my-file.txt:/container-readonly-file.txt:ro'theo volumes- ghi chú :roở cuối.
rybo111
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.