이 글이 도움이 될 사람
- 기존 컨테이너를 생성했는데 지우지 않고 마운트를 하고 싶은 사람
- 이미 마운트 했는데 또 추가하고 싶은 사람
- 아직 컨테이너 만들기 전이다? 그러면 이 글 말고 '도커 컨테이너 볼륨 마운트 설정' 검색해서 편하게 하세요
- 이 방법 말고는 '컨테이너'를 '도커 이미지'로 만들어서 새로운 컨테이너 생성할 때 마운트해주는 수 밖에...
(다만 이 글은 구글링해서 찾은 방법을 따라한 게 아니라 친구들이 도커 고수들이라 이 방법이 되지 않을까해서 해봤는데, 저는 잘되길래 남겨놓은 것임을 밝힙니다.)
과정 요약
- 도커 재시작 및 컨테이너 종료
- hostconfig.json 수정
- config.v2.json 수정
- 도커 서비스 재시작
- 컨테이너 실행 후 마운트 확인
1. 일단 컨테이너와 도커 서비스를 멈춘다
: config 를 수정해야 하니 일단 다 멈추고 안전하게 해야 하니까.
docker stop [container_id]
docker service stop
- 혹시 몰라서 'docker ps' 를 통해 켜져 있는 컨테이너를 확인하고 모두 종료해줬다
2. hostconfig.json 수정
sudo vim /var/lib/docker/containers/[container_id]/hostconfig.json
- [container_id]: 'docker ps' 로 나오는 짧은 id 가 아니라 전체 id 가 필요하다.
- 전체 id 출력하는 방법: 'docker inspect [container_name]' (모르겠다면 여기서 참고할 것)
[수정 전]
{
"Binds": [
"/media/new_jeans/love:/home/love",
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
- 수정 전에는 내가 이 컨테이너를 만들면서 처음 마운트했던 경로가 나와 있다
- /media/new_jeans/love: 호스트에 있는 경로
- /home/love: 컨테이너 경로
[수정 후]
{
"Binds": [
"/media/new_jeans/love:/home/love",
"/hdd/overwatch/zeta:/home/love/mount"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
- /hdd/overwatch/zeta: 새롭게 접근하고 싶은 호스트 주소 (나 같은 경우는 하드디스크에도 접근하고 싶어졌다)
- /home/love/mount: 호스트 주소에 접근가능한 폴더 'mount' 를 생성한다
- 여기서 'mount' 폴더를 미리 만들어두지 않았는데 저렇게 해도 되나 싶었지만, 알아서 폴더를 생성해줬다...!!!
3. config.v2.json 수정
: 이건 설정이 길고 많아서 수정할 부분만 보여주겠다.
[수정 전]
"OS": "linux",
"RestartCount": 0,
"HasBeenStartedBefore": true,
"HasBeenManuallyStopped": true,
"MountPoints": {
"/home/love": {
"Source": "/media/new_jeans/love",
"Destination": "/home/love",
"RW": true,
"Name": "",
"Driver": "",
"Type": "bind",
"Propagation": "rprivate",
"Spec": {
"Type": "bind",
"Source": "/media/new_jeans/love",
"Target": "/home/love"
},
"SkipMountpointCreation": false
}
},
- "MountPoints": 이 안에 1개 더 추가해주면 된다.
- 기존에 있는 걸 참고해서 추가하면 아래와 같다.
[수정 후]
"OS": "linux",
"RestartCount": 0,
"HasBeenStartedBefore": true,
"HasBeenManuallyStopped": true,
"MountPoints": {
"/home/love": {
"Source": "/media/new_jeans/love",
"Destination": "/home/love",
"RW": true,
"Name": "",
"Driver": "",
"Type": "bind",
"Propagation": "rprivate",
"Spec": {
"Type": "bind",
"Source": "/media/new_jeans/love",
"Target": "/home/love"
},
"SkipMountpointCreation": false
},
"/home/love/mount": {
"Source": "/hdd/overwatch/zeta",
"Destination": "/home/love/mount",
"RW": true,
"Name": "",
"Driver": "",
"Type": "bind",
"Propagation": "rprivate",
"Spec": {
"Type": "bind",
"Source": "/hdd/overwatch/zeta",
"Target": "/home/love/mount"
},
"SkipMountpointCreation": false
}
},
- 실제로 이거 입력하는 게 꽤 난이도가 높은 일이었다.
- 터미널이다보니까 위처럼 예쁘게 나오지도 않아서 일일이 입력했다.
- 나 같은 경우엔 json 내용 복사해서 터미널에 옮긴 다음 format document 를 통해 공백이 예쁘게 보이도록 다듬었다. 그 후 vscode 에서 작성하고 복사해서 붙여넣었다.
4. 재실행 후 확인
sudo service docker start
- 이제 컨테이너 실행해서 확인해보자
'NLP > error' 카테고리의 다른 글
[error] 파라미터 제대로 frozen 하세요 (0) | 2024.06.28 |
---|---|
[error] conda 에서 local 에 설치된 라이브러리에 접근해요 (0) | 2024.02.23 |
[error] GPU가 충분한데 CUDA OUT OF MEMORY가 발생합니다 (0) | 2023.12.13 |
[error] PeftModelForCausalLM.generate() takes 1 positional argument and 2 were given (0) | 2023.09.19 |
[error] 파이썬 엑셀 인코딩 문제 해결 (0) | 2023.09.19 |