Mac의 Docker 컨테이너에서 파일 동기화가 잘못되었을 때의 대책

TL;TR


Docer for Mac에서 Linux 등 예민한 OS 기반 컨테이너와 호스트 Mac 간에 파일이 동기화될 때 이러한 상황이 발생합니다.
해결 방안은 Mac에 케이스 민감 볼륨을 만들어 Mac에 불러오고 용기에 불러오는 것이다.
다음 두 명령을 통해 "아"하는 동안 Mac에서 사례가 민감한 볼륨을 만들 수 있습니다.
hdiutil create -type SPARSE -fs hfsx -size 4g -volname linux linux.hfsx.dmg.sparseimage
hdiutil attach -nobrowse -mountpoint linux linux.hfsx.dmg.sparseimage

배경 및 문제


엔지니어 팀 내와 생산 테스트 등 서로 다른 환경에서 OS, 중간부품과 그들의 버전 등을 최대한 동일하게 하기 위해 우리는 Docker 용기로 Mac에 로컬 개발 환경을 구축했다.새 구성원이 있어도 용기를 가동하면 개발 환경을 구축할 수 있다.
Docker 컨테이너에 있는 웹 서버의 문서 루트에 Mac의 소스 코드가 있는 디렉토리를 마운트하면 로컬에서 편집한 디렉토리가 바로 로컬 웹 서버에 반영됩니다.그렇긴 한데..., 때로는 변경을 빈번하게 반영하지 못할 때도 있다.
컨테이너 재가동을 반영했기 때문에 발생했을 때는 이렇게 했지만 효율이 너무 떨어져서 수정하고 싶었어요.
변경 사항이 반영되지 않을 때 컨테이너 내의 파일을 확인하면 변경 사항이 반영됩니다.그러나 브라우저에서는 반영되지 않았다.
그리고 우연히 오류가 났을 때 그 파일 이름, FooBar를 봤어요.php일 것 같은 파일 이름은foobar입니다.php와 로그에 다 있습니다.단, ls 명령으로 용기 안을 확인할 때, FooBar.php,foobar가 있어도.php가 없습니다.
포바를 시도해 보세요.vim로 php를 열면 열릴 뿐만 아니라 내용도 낡아집니다.그리고 FooBar.php를 열면 새로운 것이 됩니다.
그래도 포바.php는 ls에 나타나지 않습니다.

원인


용기를 기반으로 하는 OS는 사례가 민감하지만 용기 안에서 사용하는 파일 시스템 자체가 맥을 계승하는 사례가 민감하다는 것이 문제다.용기 안의 OS는 파일 이름의 대소문자를 구분하는 전제에서 이동하지만 사용하는 파일 시스템은 대소문자를 구분하지 않기 때문에 Mac과 용기 사이에 파일을 동기화할 때 어디에서 일치하지 않는 것 같습니다.
일어날 때와 안 일어날 때는 모두 소문자로 된 파일 이름이면 문제없다.

해결 방법


예민한 케이스 볼륨 생성


참조: https://github.com/docker/for-mac/issues/320#issuecomment-315324629
Mac에 케이스 민감 볼륨을 만들어서 Mac에 불러오고 용기에 불러옵니다.
우선, 사례 민감 볼륨을 만듭니다.구역의 크기를 바꾸거나 포맷하는 것은 아무런 번거로움도 없다.아래 명령으로 4GB의 민감한 볼륨을 순식간에 만들 수 있습니다.
hdiutil create -type SPARSE -fs hfsx -size 4g -volname linux linux.hfsx.dmg.sparseimage
다음 명령을 사용하여 Mac에 설치합니다.설치 위치는 -mountpoint 에서 지정됩니다.
hdiutil attach -nobrowse -mountpoint /Users/hoge/linux linux.hfsx.dmg.sparseimage
마운트하면 일반 디렉토리처럼 사용할 수 있습니다.

여기에서 컨테이너의 볼륨으로 마운트하면 컨테이너의 케이스 민감도와 일치하는 문제가 발생하지 않습니다.
예를 들어docker-compose는 이런 느낌이다.
services:
  ctober-web-server:
    ...
    volumes:
      - /Users/hoge/linux:/var/www/html:cached

하면, 만약, 만약...


이 볼륨이 필요하지 않으면 아래에 unmount를 설치할 수 있습니다.
hdiutil eject linux
또한 Mac을 재부팅한 후 설치해야 합니다.이때 위 hdiutil attach 명령을 실행하면 됩니다.

볼륨 크기 조정


디스크 이미지를 생성한 후 크기를 늘리려면 hdiutil resize 를 사용하여 크기를 조정할 수 있습니다.(내 경우 한 순간도 화면이 표시되지 않았지만 음량 크기를 보고 바뀌었다.)
hdiutil resize -size 8G linux.hfsx.dmg.sparseimage

IDE 경고


JetBrains의 PhpStorm 등을 사용하여 제작된 케이스 민감 볼륨의 파일을 편집하면 IDE가 식별하는 케이스 민감도와 파일 시스템이 다르다는 경고가 표시됩니다.
이제 Help->Edit Custom Properties에서 파일에 다음 내용을 추가합니다.
idea.case.sensitive.fs=true
그런 다음 IDE를 재부팅하면 됩니다.
참조: https://confluence.jetbrains.com/display/IDEADEV/Filesystem+Case-Sensitivity+Mismatch

좋은 웹페이지 즐겨찾기