1. 컨테이너 생성
docker run -p <Host port>:<Container port> -it --gpus all --shm-size=256g --name 256g_js pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime /bin/bash
<Host port>는 서버에 접속할 당시에 사용하던 포트를 사용하면 안된다. 예를 들어, ssh접속을 통해 22번 포트로 서버 접속을 한다면 <Host port>에는 22를 적으면 이미 사용하고 있는 포트라 오류가 발생한다. 그러므로 23번 포트 또는 사용하지 않는 포트를 사용해야 한다. <Container port>는 container에서 사용할 port를 작성하면 된다.
이미 사용하고 있는 포트를 사용하면 발생하는 오류
docker: Error response from daemon: driver failed programming external connectivity on endpoint 256g_js (2ec2dc1e18a9e1c6624b4b2de4e3023f4b022d33bc453b818ddf89511b379f2e): Error starting userland proxy: listen tcp 0.0.0.0:13432: bind: address already in use. ERRO[0000] error waiting for container: context canceled
해당 에러에서는 호스트에 접속할 때 13432 포트를 사용하고 있는데, docker run -p 13432:45322 처럼 작성해서 오류가 발생했던 것이다.
호스트가 아닌, 도커에서 사용하고 있지 않은 포트를 확인하는 방법도 있다.
for i in $(seq 8000 9000); do
if ! docker ps -a --format '{{.Ports}}' | grep -q $i; then
echo "Port $i is available"
fi
done
위 코드의 예시는 8000 ~ 9000 사이에 사용하고 있지 않은 포트의 확인 방법이다. 사용할 포트 범위에 맞춰서 쉘 스크립트 코드를 수정하면 원하는 결과를 얻을 수 있을 것이다.
2. ssh 설정에 필요한 것 설치
apt-get update
apt-get install vim nano net-tools openssh-server
3. 컨테이너 내부 포트 열어주기
vi /etc/ssh/sshd_config
4. 컨테이너 root계정 비밀번호 변경
나중에 ssh로 연결할 때 root비밀번호를 요구를 하는데, vscode에서 컨테이너에 접속을 할 때 엔터만 누르고 진입하려고 하니 되지 않았다. 해당 컨테이너의 root(사용자) 비밀번호 설정 후 로그인하니 되었음.
passwd
위 명령어를 입력하면 로그인되어 있는 계정에서 비밀번호를 변경할 수 있도록 할 수 있다.
https://ciscoking.tistory.com/37
5. ssh 서비스 시작
service ssh start
6. 접속 테스트
ssh root@<호스트ip주소> -p <컨테이너 생성 당시 호스트의 포트번호>
컨테이너 재시작 후 SSH 접속 되지 않을 때
만약 컨테이너가 종료 된 후 다시 시작되었을 때 ssh로 컨테이너에 접속이 되지 않는다면, service ssh start 명령어를 컨테이너 내부에서 다시 입력해주어야 한다.
'Docker' 카테고리의 다른 글
[Docker] volume (0) | 2024.06.10 |
---|---|
[Docker, Ubuntu 22.04] 도커 설치부터 Nvidia-toolkit까지 (0) | 2024.01.05 |
[Docker, WSL2] 로컬 컴퓨터의 컨테이너 VScode로 접속 (1) | 2023.10.31 |
[Docker, WSL2] docker: Error response from daemon: failed to create task for container: failed to create shim task: (0) | 2023.10.31 |