본문 바로가기
Docker

[Docker] Volume 사용시 mac 에 /var/lib/docker 경로가 없는 이유 | LIM

by forestlim 2023. 5. 14.
728x90
반응형

이전 포스팅에서 docker 컨테이너에 volume을 사용해서 데이터를 저장했었는데 그때 /var/lib/docker 에 volume이 생성되었지만 로컬에서 접근을 할 수 없었다. 

https://amazelimi.tistory.com/entry/Docker-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%97%90-%EC%A0%80%EC%9E%A5%EB%90%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9C%A0%EC%A7%80Volume-Mount-LIM

 

[Docker] 컨테이너에 저장된 데이터 유지(Volume Mount) | LIM

Docker 컨테이너 내부에 쓰인 데이터는 기본적으로 컨테이너가 삭제될 때 함께 사라진다. 따라서 Docker에서 수집한 데이터를 영속적으로 저장하기 위해서는 다른 방법이 필요하다. Docker 컨테이너

amazelimi.tistory.com

 

볼륨 생성

docker volume create volume-test

 

볼륨 확인

docker volume ls

 

볼륨에 대한 상세 정보 확인

docker volume inspect volume-test


[
    {
        "CreatedAt": "2023-05-14T07:38:03Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/volume-test/_data",
        "Name": "volume-test",
        "Options": {},
        "Scope": "local"
    }
]

 

위의 Mountpoint를 보면 해당 볼륨이 컴퓨터의 어느 경로에 생성되었는지 확인할 수 있다. 

현재 /var/lib/docker/volumes 안에 생성된 것을 확인할 수 있다. 

 

하지만, 해당 경로를 들어가니

 ~/ cd /var/lib/docker                                    [23/05/14 | 4:40:53]
cd: no such file or directory: /var/lib/docker

다음과 같이 찾을 수 없다고 떴다. 

 

Mac 환경의 Docker는 /var/lib/docker 가 없다고 한다. 왜?

Mac의 경우 docker를 바로 실행하는 것이 아니고 VM을 띄우고 그 위에 실행시키기 때문이라고 한다. 

/var/lib/docker 에 접근하기 위해서는 리눅스 가상 머신에 접속한 뒤에 접근해야 한다. 

 

https://collabnix.com/how-docker-for-mac-works-under-the-hood/

 

가상 머신에 접근해서 데이터를 확인하려면?

docker를 run 할 때 다음과 같은 커맨드를 날려서 shell에 직접 접속하면 된다. 

docker run -it --privileged --pid=host volume:test nsenter -t 123 -m

 

-it 옵션: -i 옵션과 -t 옵션은 같이 쓰이는 경우가 많다. 이 두 옵션은 컨테이너를 종료하지 않은 채로, 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용된다. 

 

--privileged 옵션: 도커 컨테이너는 기본적으로 Unprivileged 모드로 실행되며, 이 모드에서는 시스템 주요 자원에 접근할 수 있는 권한이 부족하기 때문에, 특정 장치 등의 시스템 자원에 접근할 수 없다. 따라서 직접 접근해서 시스템 자원을 확인하기 위해서는 --privileged 옵션으로 설정해주어야 한다. 

 

nsenter: Docker 환경에서 기존 네임스페이스에 진입하여 작업할 수 있는 명령어. 네임스페이스는 PID, 네트워크 인터페이스, 마운트 포인트 등과 같은 시스템 자원의 격리 및 가상화를 제공하는 Linux 커널의 기본 구성 요소

  • nsenter의 option -t : target option {pid}
  • nsenter 의 option -m: mount 된 namespace 로의 접속

 

그럼 VM에 접근 가능하고 다음과 같이 확인이 가능하다.

eaed275623af:/var/lib/docker/volumes/volume-test/_data# cat test.txt
0
1
2
3
4
5
6
7
8
9
728x90
반응형

댓글