이전 포스팅에서 docker 컨테이너에 volume을 사용해서 데이터를 저장했었는데 그때 /var/lib/docker 에 volume이 생성되었지만 로컬에서 접근을 할 수 없었다.
볼륨 생성
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 에 접근하기 위해서는 리눅스 가상 머신에 접속한 뒤에 접근해야 한다.
가상 머신에 접근해서 데이터를 확인하려면?
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
'Docker' 카테고리의 다른 글
[Docker] Langsmith mkdir: can't create directory permission denied 해결하기 | LIM (0) | 2024.12.17 |
---|---|
[Python] 도커 파일에 Pipenv 로 패키지 설치하기 | LIM (0) | 2023.05.12 |
[Docker] 컨테이너에 저장된 데이터 유지(Volume Mount) | LIM (0) | 2023.05.10 |
[Docker, GCP] docker push to artifact registry error 발생 및 해결 (0) | 2022.08.08 |
[Docker] 도커 내부에서 localhost 요청하기 | LIM (0) | 2022.07.19 |
댓글