programing tip

Docker에 볼륨을 추가하지만 하위 폴더는 제외

itbloger 2020. 6. 5. 20:17
반응형

Docker에 볼륨을 추가하지만 하위 폴더는 제외


내 호스트에 Docker 컨테이너와 폴더가 있다고 가정합니다 /hostFolder. 나는 볼륨으로 도커 컨테이너에이 폴더를 추가 할 경우 지금, 그때 사용하여이 작업을 수행 할 수 있습니다 ADDDockerfile또는 볼륨으로 장착.

여태까지는 그런대로 잘됐다.

이제 /hostFolder하위 폴더가 포함되어 있습니다 /hostFolder/subFolder.

/hostFolderDocker 컨테이너 에 마운트하고 싶습니다 (읽기 쓰기 또는 읽기 전용이 중요하지 않은지, 둘 다 작동하는지 여부).하지만 포함 시키지 않으려 고합니다 /hostFolder/subFolder. 이것을 제외하고 Docker 컨테이너가 호스트에서 변경하지 않아도이 하위 폴더를 변경할 수 있기를 원합니다.

이것이 가능한가? 그렇다면 어떻게?


docker-compose 사용 node_modules를 로컬로 사용할 수 있지만 다음 구문의 다음 구문을 사용하여 docker 컨테이너에서 무시하십시오. docker-compose.yml

volumes:
   - './angularApp:/opt/app'
   - /opt/app/node_modules/

따라서 로컬 시스템 이 비어 있지 않더라도 모든 항목 ./angularApp이 매핑 된 /opt/app다음 /opt/app/node_modules/빈 디렉토리 인 다른 마운트 볼륨 만듭니다 ./angularApp/node_modules.


docker-compose이지만 영구적으로 하위 디렉토리를 무시하려면 다음을 수행하십시오 docker-compose.yml.

volumes:
  node_modules:
services:
  server:
    volumes:
      - .:/app
      - node_modules:/app/node_modules

현재 디렉토리를 공유 볼륨으로 마운트하지만 로컬 node_modules디렉토리 대신 영구 도커 볼륨을 마운트합니다 . 이것은 @kernix의 답변과 비슷하지만 실행 node_modules사이에 지속될 docker-compose up있으며 이는 바람직한 동작 일 것입니다.


우선, 사용 ADDDockerfile에 지시 것은 매우 (비아 중 볼륨을 사용하여 다른 -v행 인자 docker run또는 VOLUMEDockerfile의 명령). ADDCOPY명령은 단지 시간에 파일의 복사본을 docker build실행됩니다. 이 파일은 docker build명령 으로 새로운 이미지를 만들 때까지 업데이트되지 않습니다 . 반대로, 볼륨을 사용한다는 것은 본질적으로 "이 디렉토리는 컨테이너 이미지에 저장되어서는 안되며 대신 호스트의 디렉토리를 사용하십시오"라는 의미입니다. 볼륨 내부의 파일이 변경 될 때마다 호스트와 컨테이너 모두 즉시 볼 수 있습니다.

볼륨을 사용하여 원하는 것을 얻을 수 있다고 생각하지 않습니다.이를 수행하려면 디렉토리 구조를 다시 생각해야합니다.

그러나 COPY(를 선호해야 함)을 사용하는 것은 매우 간단합니다 ADD. .dockerignore파일을 사용 하여 서브 디렉토리를 제외하거나 COPY모든 파일을 수행 RUN rm bla하여 서브 디렉토리를 제거 할 수 있습니다.

이미지에 추가 COPY하거나 ADD빌드 컨텍스트 내에 있어야합니다 (즉, 실행하는 디렉토리 내부 또는 아래) docker build.


파일을 제외하려면 다음을 사용하십시오.

volumes:
   - /hostFolder:/folder
   - /dev/null:/folder/fileToBeExcluded

이전 솔루션이 더 이상 작동하지 않는 것 같습니다 (적어도 나를 위해). 빈 폴더를 만들고 대상 폴더를 매핑하는 것이 도움이되었습니다.

volumes:
   - ./angularApp:/opt/app
   - .empty:/opt/app/node_modules/

node_modules 폴더가 여전히 로컬 시스템 및 다른 방법으로 덮어 쓸 수있는 문제가있는 사람들을 위해

volumes:
  node_modules:
services:
  server:
    volumes:
      - .:/app
      - node_modules:/app/node_modules/

이것은 /node_modules 뒤에 후행 이있는 해결책입니다.


docker 명령 줄을 사용하여 :

docker run \
    --mount type=bind,src=/hostFolder,dst=/containerFolder \
    --mount type=volume,dst=/containerFolder/subFolder \
    ...other-args...

-v옵션을 사용할 수도 있지만 ( Bogdan Mart의 신용 ), --mount더 명확하고 권장 됩니다.

참고 URL : https://stackoverflow.com/questions/29181032/add-a-volume-to-docker-but-exclude-a-sub-folder

반응형