Docker, 읽기 전용으로 볼륨 마운트


106

저는 Docker로 작업하고 있으며 많이 변경되는 동적 폴더를 마운트하고 싶습니다 (따라서 각 실행마다 Docker 이미지를 만들 필요가 없어서 비용이 너무 많이 듭니다).하지만 해당 폴더가 읽기 전용이되기를 원합니다. . 폴더 소유자를 다른 사람으로 변경하면 작동합니다. 그러나 응용 프로그램에 노출하지 않으려 chownroot액세스 권한이 필요 합니다.

-v플래그를 사용 하여 마운트 하면 내가 제공하는 사용자 이름이 무엇이든 제공하고, 도커 이미지 내에 루트가 아닌 사용자를 만들었지 만, 소유자가 도커를 실행 한 사용자 인 볼륨의 모든 파일은 사용자 I로 변경됩니다. 명령 줄에서 제공하므로 읽기 전용 파일과 폴더를 만들 수 없습니다. 어떻게 방지 할 수 있습니까?

또한을 추가 mustafa ALL=(docker) NOPASSWD: /usr/bin/docker하여 터미널을 통해 다른 사용자로 변경할 수 있지만 여전히 파일에는 내 사용자에 대한 권한이 있습니다.


사용자가 도커 컨테이너를 실행할 수 있도록하는 것은 전체 루트 액세스 권한을 부여하는 것과 동일하다는 의견을 여기에 남길 것이라고 생각했습니다. 이는 도커 문서의 보안 섹션에도 설명되어 있습니다.
Blackclaws 2008 년

답변:


170

스위치 에 추가 :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
쓰기를 허용하지만 호스트에 다시 쓰지 않습니까? 그 환상적 일 것
레이 포스

9
볼륨을 전혀 지정하지 않으려는 것 같습니다.
Alp

1
일종의 ... Dockerfile COPY를 사용하거나 docker cp종료 된 컨테이너에서 별도의 명령을 사용하기 위해 이미지를 빌드해야하는 것을 좋아하지 않습니다.
Ray Foss

5
더 자세한 정보를 제공하고 여기에 링크하는 새로운 질문을 만들 수 있습니까?
Alp

docker redis:alpine:ro
compote

23

도커 작성

에서 읽기 전용 볼륨을 지정하는 적절한 방법은 다음과 같습니다 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.2 파일 형식에 추가되었습니다." yep
rybo111

3
- './my-file.txt:/container-readonly-file.txt:ro'아래에서 할 수도 있습니다 volumes- :ro끝에 메모하십시오 .
rybo111
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.