이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 9379|회답: 0

Docker 볼륨이 마운트될 때 파일이나 폴더가 존재하지 않습니다

[링크 복사]
게시됨 2021. 11. 8. 오전 9:20:35 | | |
배경

Docker 볼륨은 도커 컨테이너를 시작할 때 이미지 내 원본 파일을 덮어쓰기 위해 일부 파일(예: 구성 파일)을 동적으로 마운트할 수 있게 해주지만, 호스트에 아직 존재하지 않는 폴더나 파일을 컨테이너에 마운트하면 어떻게 되나요? LZ는 자신의 작업 중 이러한 문제를 겪었기에 직접 연습하고 실험 결과를 다음과 같이 기록했습니다:

폴더 마운트

Docker의 폴더 마운트 동작은 다음과 같이 일관적입니다:

  • 만약 폴더가 존재하지 않는다면, 폴더가 먼저 생성됩니다(또는 다단계 폴더일 경우 재귀적으로 생성됩니다)
  • 컨테이너 내 폴더 내용을 호스트의 폴더 내용으로 덮어쓰세요


자세한 내용은 다음과 같습니다:

호스트의 폴더는 존재하며 비어 있지 않습니다

호스트
컨테이너
마운트 결과
비어 있지 않은 폴더 A가 존재합니다.존재하지 않는 폴더 B먼저 Contanier에 폴더 B를 만들고, 그 다음 폴더 A에 있는 모든 파일을 복사해서 B로 옮깁니다
비어 있지 않은 폴더 A가 존재합니다.비어 있지 않은 폴더 B가 존재합니다.먼저, 컨테이너 중국어 폴더 B의 원본 내용을 비우고, 그 다음 A 중국어 복사본을 B로 복사하세요

컨테이너 내 폴더 B가 존재하든 없든, A는 B의 내용을 완전히 덮어씁니다

호스트에 있는 폴더는 존재하지만 비어 있습니다

호스트
컨테이너
마운트 결과
존재하는 빈 폴더 A비어 있지 않은 폴더 B가 존재합니다.컨테이너 중국어 폴더 B 안의 내용물이 비워졌습니다

컨테이너 내 해당 폴더의 내용물이 비워집니다

호스트 폴더는 존재하지 않습니다

호스트
컨테이너
마운트 결과
존재하지 않는 폴더 A비어 있지 않은 폴더 B가 존재합니다.호스트에서 폴더 A를 생성하면 컨테이너 중국어 폴더 B의 내용물이 비워집니다
존재하지 않는 폴더 A/B/C비어 있지 않은 폴더 B가 존재합니다.호스트에서 A/B/C 폴더를 만들고, 컨테이너 중국어 폴더 B의 내용은 비워집니다

컨테이너 내 해당 폴더의 내용물이 비워집니다

요약

호스트 폴더는 컨테이너 중국어 폴더를 확실히 덮어씁니다:

호스트
컨테이너
마운트 결과
폴더가 존재하지 않음/폴더가 존재하지만 비어 있습니다폴더는 존재하지 않고/존재하지만, 비어 있거나 비어 있지 않습니다용기 중국산 조각 덮개(비워짐)
폴더는 존재하며 비어 있지 않습니다폴더는 존재하지 않고/존재하지만, 비어 있거나 비어 있지 않습니다컨테이너 중국어 폴더 내용이 덮어쓰여집니다(원래 내용은 비워지고, 호스트의 폴더 내용도 덮어쓰입니다)

파일 마운트

파일 마운트와 폴더 마운트의 가장 큰 차이점은 다음과 같습니다:

  • 도커는 호스트에 존재하지 않는 파일을 컨테이너에 이미 존재하는 파일에 마운트하는 것을 금지합니다
  • 파일 마운트는 같은 폴더 내 다른 파일에는 영향을 미치지 않습니다

또한, 덮어쓰기 동작은 폴더 마운트와 일치합니다. 즉:

  • 컨테이너 내 파일 내용을 호스트의 파일 내용으로 덮어쓰세요


자세한 내용은 다음과 같습니다:

호스트

호스트
컨테이너
마운트 결과
존재하지 않는 파일들configA.js이미 존재하는 문서들congfigB.js오류, 디렉터리를 파일에 마운트하려는 건가요? 지정된 호스트 경로가 존재하는지, 그리고 예상 타입인지 확인하세요. 호스트에서 동시에 두 개의 빈 configB.js configA.js디렉터리를 생성하지만, 컨테이너는 시작되지 않습니다

호스트

호스트
컨테이너
마운트 결과
파일 configA.js현재 파일 congfigB.js컨테이너 중국어 항목은 동일하게 유지되configB.js, 파일 내용은 congfigA.js 내용에 의해 덮어쓰여집니다
파일 configA.js존재하지 않는 파일들congfigB.jsconfigA.js 파일의 내용이 담긴 컨테이너에 새로 configB.js 파일은 그 파일 내 다른 모든 파일configB.js 변경되지 않습니다

요약

호스트의 파일은 항상 컨테이너 중국어 폴더를 덮어씁니다

호스트
컨테이너
마운트 결과
존재하지 않는 파일이미 존재하는 문서금지된 행위
존재하는 문서존재하지 않는 파일 / 이미 존재하는 파일추가/덮어쓰기 (존재하지 않는 디렉터리를 생성)

결론

폴더 마운트

  • 존재하지 않는 폴더나 빈 폴더를 컨테이너에 마운트하면, 해당 폴더들도 비워집니다
  • 비어 있지 않은 폴더를 컨테이너에 붙이면 컨테이너 내 원래 폴더가 덮어쓰여집니다

파일 마운트

  • 컨테이너에 이미 존재하는 파일에 존재하지 않는 파일을 마운트하는 것은 금지되어 있습니다
  • 기존 파일은 컨테이너에 부착될 때 덮어쓰어지며, 파일이 존재하지 않으면 생성됩니다

응용 시나리오

  • 위 분석에서 알 수 있듯이, 폴더 마운트는 전체 폴더의 파일을 덮어쓰는 데 사용되며, 많은 파일을 컨테이너에 마운트해야 할 때 사용할 수 있습니다. 또한, 빈 폴더나 존재하지 않는 폴더가 마운트될 경우, 일반적으로 반대로 사용됩니다. 즉, 컨테이너가 시작된 후 일부 파일(예: 로그)이 컨테이너 내 마운트 지점의 폴더 아래에 생성되고, 이 시점에서는 해당 호스트의 폴더에서 직접 볼 수 있습니다.
  • 파일 마운트는 종종 구성 파일을 마운트하여 실행 시 기본 구성을 동적으로 수정하는 데 사용되는데, 이는 컨테이너 내 같은 폴더 내 다른 파일에는 영향을 주지 않고 단일 파일만 덮어쓰기 때문입니다.

전근 출처:하이퍼링크 로그인이 보입니다.

(끝)




이전의:Elasticsearch는 elasticdump를 사용하여 데이터를 백업하고 마이그레이션합니다
다음:Docker POI 오류 예외 솔루션
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com