programing

도커에 볼륨을 추가하지만 하위 폴더 제외

minimums 2023. 8. 16. 22:07
반응형

도커에 볼륨을 추가하지만 하위 폴더 제외

합니다./hostFolder 이 하려면 Docker를 사용하여 이 할 수 .ADD에 시대에Dockerfile볼륨으로 마운트할 수도 있습니다.

지금까지, 좋아요.

지금이다/hostFolder폴더인 하위폴포니다함합이 되어 있습니다./hostFolder/subFolder.

탑재하고 싶습니다./hostFolderDocker 컨테이너(읽기-쓰기 또는 읽기 전용이든 상관 없음, 둘 다 작동함)에 포함시키지만 포함시키고 싶지 않습니다./hostFolder/subFolder이 항목을 제외하고 Docker 컨테이너가 호스트에서 변경되지 않고 이 하위 폴더를 변경할 수 있기를 원합니다.

이것이 가능합니까?만약 그렇다면, 어떻게?

를 사용하면를 사용할 수 docker-compose의 할 수 docker-compose.yml

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

그서모든것에 모든 것../angularApp는 에 매핑되어 있습니다./opt/app그런 다음 다른 마운트 볼륨을 생성합니다./opt/app/node_modules/은 빈 디렉토리가 . 내 머신에 말이죠../angularApp/node_modules비어 있지 않습니다.

합성에 하려면 도에커의무하시디위리를영합에서 다음을 할 수 .docker-compose.yml:

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

이렇게 볼륨으로 "Docker 볼륨" 대신 영구 도커 볼륨을 수 .node_modules디렉토리입니다.이것은 @kernix의 답과 비슷하지만, 이것은 가능할 것입니다.node_modules를 유지하다docker-compose up실행. 원하는 동작일 가능성이 높습니다.

를 원활하게 준비되어 .node_modules로컬에 의해 재정의되지 않습니다. 도움이 될 수 있습니다.

  1. 도커 구성을 변경하여 익명 영구 볼륨을 node_modules에 마운트하여 로컬에서 재정의하지 않도록 합니다.이것은 이 스레드에서 몇 번 설명되었습니다.
services:
  server:
    build: .
    volumes:
      - .:/app
      - /app/node_modules
  1. 이것이 우리가 놓치고 있던 중요한 부분입니다.는 스을회킬때사용시를 합니다.docker-compose -V 새 때됩니다.node_modules당신의 첫 번째 도커-포켓 발사부터.
    -V, --renew-anon-volumes   Recreate anonymous volumes instead of retrieving
                               data from the previous containers.

파일을 제외하려면 다음을 사용합니다.

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

도커 명령줄 사용:

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

-v옵션이 사용될 수도 있습니다(Bogdan Mart에 대한 크레딧).--mount보다 명확하고 권장됩니다.

첫번째, 을 사용합니다.ADDDocker 파일의 명령은 볼륨을 사용하는 것과 매우 다릅니다.-v에 대한 인수입니다.docker run 는또.VOLUMEDocker 파일에 있는 명령).ADD그리고.COPY명령은 단지 그 당시 파일의 복사본을 가져옵니다.docker build실행됩니다.이러한 파일은 다음을 사용하여 새 이미지를 생성할 때까지 업데이트되지 않습니다.docker build휘권지 하는 것은 으로 "이는 컨테이너 되지 않고 해야 합니다라고 말합니다. 모두 를 즉시볼 수 .반대로 볼륨을 사용하는 것은 기본적으로 "이 디렉터리는 컨테이너 이미지에 저장되지 않고 대신 호스트의 디렉터리를 사용해야 합니다."라고 말합니다. 볼륨 내부의 파일이 변경될 때마다 호스트와 컨테이너 모두 해당 디렉터리를 즉시 볼 수 있습니다.

볼륨을 사용하여 원하는 것을 달성할 수 있다고 생각하지 않습니다. 이렇게 하려면 디렉터리 구조를 다시 생각해야 합니다.

그러나 사용하는 것은 매우 간단합니다.COPY 더 .)ADD) 를도 있습니다.dockerignore디렉터리를 "파일"을 할 수 있습니다.COPY이 든파을수니다합행일모를 합니다.RUN rm bla하위 디렉터리를 제거합니다.

이미에추가모파다같음습다니과일은든으로 이미지에 하십시오.COPY또는ADD빌드 컨텍스트 내에 있어야 합니다. 즉, 실행하는 디렉토리 내 또는 아래에 있어야 합니다.docker build

node_dll 폴더가 로컬 시스템에서 덮어쓰거나 그 반대의 경우에도 문제가 있었던 사람들을 위해

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

이것이 해결책입니다, 추적과 함께./node_node_fix 합니다.

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

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

도커 바인드 마운트node_modules 관련 작업 링크를 찾았습니다.
이 작업 솔루션은 도커 볼륨 관리자에 "제외"라는 이름의 볼륨을 생성합니다.볼륨 이름 "exclude"는 임의이므로 볼륨에 대한 사용자 지정 이름제외 대신 사용할 수 있습니다.

services:
    node:
        command: nodemon index.js
        volumes:
            - ./:/usr/local/app/
            # the volume above prevents our host system's node_modules to be mounted
            - exclude:/usr/local/app/node_modules/

volumes:
    exclude:

공식 문서에서 볼륨에 대한 더 많은 정보를 볼 수 있습니다 - 도커 작성과 함께 볼륨 사용

이것은 Manjaro Linux에서 작동합니다. Docker Composyml은 마지막 비 스웜 버전 이후로 v2.4가 맨 위에 있습니다.호스트의 스냅샷 폴더가 도커 컨테이너에서 제외되었는지 확인하려고 합니다.도커 구성에 볼륨 섹션이 없으므로 단순하게 유지합니다.

version: "2.4"    
services:
  filerun:
    volumes:
      - $DATAPOOL/users:/user-files
      - /user-files/snapshots/

호스트에서 폴더 사용자/스냅샷은 변경되지 않은 상태로 유지됩니다.컨테이너 내에서 사용자 파일/스냅샷 폴더는 빈 폴더에 불과합니다.

프로젝트 내부에 존재해야 하는 파일, 특히 env 파일의 경우 다음 솔루션을 사용했습니다.

    volumes:
      - ./empty.env:/app/.env

여기서 "empty.env"는 빈 파일일 뿐입니다.컨테이너 내부와 외부의 다른 환경에서 동일한 브랜치를 사용하는 데 도움이 되었습니다.

컴퓨터의 볼륨에 포함된 마운트된 파일을 제외하려면 이 파일에 볼륨을 할당하여 덮어써야 합니다.구성 파일:

services:
  server:
    build : ./Dockerfile
    volumes:
      - .:/app

도커 파일의 예:

# Image Location
FROM node:13.12.0-buster
VOLUME /app/you_overwrite_file

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

반응형