본문 바로가기

메뉴얼

Docker Export/Import

Docker 재시작이 필요했던 이유

1. 기존에 사용하던 컨테이너에서 nvidia-smi 명령어가 먹지 않는 문제 발생

Failed to initialize NVML: Unknown Error
https://stackoverflow.com/questions/72932940/failed-to-initialize-nvml-unknown-error-in-docker-after-few-hours
 

Failed to initialize NVML: Unknown Error in Docker after Few hours

I am having interesting and weird issue. When I start docker container with gpu it works fine and I see all the gpus in docker. However, few hours or few days later, I can't use gpus in docker. Whe...

stackoverflow.com

 

2. DataLoader 의 shared memory가 부족

RuntimeError: DataLoader worker (pid 1838517) is killed by signal: Bus error. It is possible that dataloader's workers are out of shared memory.

2-1. Docker run command에 --ipc=host argument를 추가
: 해당 명령어는 따로 지정된 것이 아닌 host의 shared memory를 사용하기 위한 명령어

2-2. Host의 shared memory를 늘려주기 위해서는 의 /dev/shm 사이즈를 키워줄 필요성이 있다

vi /etc/fstab

위 명령어를 통해 /dev/shm 의 default 값이 정의되어 있다면 원하는 값으로 변경한다.

이후 하기 명령어를 통해 리마운트 적용

mount -o remount /dev/shm

적용된 값은 하기 명령어로 확인 가능하다.

df -h

Docker Export (Container → tar)

  • 기존에 올려놓은 Container를 tar 파일로 변경하기 위한 명령어
$ docker export [container ID 또는 이름] > [파일이름].tar

 

Docker Import (tar → Image)

  • Export로 생성한 tar 파일을 다시 Docker Image로 생성하기 위한 명령어
cat [tar 파일] | docker image import - [repository]:[tag]

Save/Load 와의 차이

  • Import/Export, Save/Load는 각각 짝을 이루며 Save는 image를 tar로 변환하는 명령어

Issues

  • docker: Error response from daemon: No command specified.
    • Import/Export 방식은 clean하게 tar파일을 만들어주지만 메타 정보를 저장하지 않는 방식이라 entrypoint 정보가 없다.
    • Entrypoint 정보를 docker run argument에 추가해주어야 한다.
  • VS code running Container에서 ctrl+p, ctrl+q로 detach가 되지 않는 경우
    • --detach-keys "[key 조합]"을 정의하여 주면 된다.

Ex)

nvidia-docker run --gpus '"device=5"' --detach-keys "ctrl-d,_" -it -p 30500:8888 -v /data/home/junho1126/.ssh:/root/.ssh -v /data/home/junho1126/dockerImg:/home/py --ipc="host" --rm "junho1126:cuda11.1_0.1" /bin/bash

 

'메뉴얼' 카테고리의 다른 글

Docker image와 container 생성  (0) 2023.01.03
SSH를 통한 서버 접속  (0) 2023.01.03