내 상황은 다음과 같습니다.
컴파일 중인 도커 이미지/컨테이너가 있습니다. Dockerfile을 통해 $HOME에 일부 구성 요소를 설치해야 합니다(따라서 이미지를 생성할 때). 이러한 구성 요소 중 하나가 에 있지만 ~/.config
다른 폴더에도 있다고 가정합니다.
.config
Docker 내부의 폴더 위에 마운트하여 호스트 시스템의 홈 폴더에 있는 파일을 덮어쓸 수 있기를 원합니다 . 마운트된 폴더에 파일을 넣을 때마다 컨테이너에 이미 있는 파일을 덮어씁니다.
이론적으로 이것이 바로 OverlayFS가 수행하는 작업입니다. 그렇죠? 하위 디렉터리는 Docker 컨테이너 내부의 디렉터리이고, 상위 디렉터리는 내 호스트 컴퓨터의 디렉터리입니다.
이것을 달성할 수 있는 방법이 있나요?
지금까지 다음과 같은 관련 주제를 찾았습니다.
https://serverfault.com/questions/841238/how-to-use-overlayfs-with-docker-volumes
단점: 대답은 호스트에서 overlayfs를 사용하는 방법만 보여주지만, 하위 컨테이너/이미지 디렉터리에 액세스하는 것은 설명이 필요하지 않고 지저분하게 느껴집니다.
-
단점: Overlay-on/over-overlay 옵션이 비활성화되어 있으므로 docker 내에서 mount -t Overlay를 사용하면 최신 커널에서 작동하지 않습니다.
호스트(즉, docker가 파일을 저장하는 디렉터리)에서 docker 파일을 직접 조작하는 방법도 생각해 보았지만 조금 지저분한 느낌이 듭니다.
이를 위해 VOLUME /home/user
Dockerfile 끝에 선언하겠습니다. 그러면 해당 디렉토리에서 내 파일을 찾을 수 있습니다 /var/lib/docker/volumes/user/_data
. 그런 다음 해당 디렉터리를 하위 계층으로 사용하고 다른 폴더를 상위 계층으로 사용하여 호스트에 오버레이 파일을 만들 수 있습니다. 그런 다음 docker run --volume
. 불행하게도 /var/lib
디렉터리에 액세스하려면 su 권한이 필요합니다. 또한 잘못된 레이어가 변경되었습니다.
또 다른 방법은 단일 파일을 바인드 마운트하는 것이지만 이는 약간의 해킹일 수도 있습니다.