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 명령어를 컨테이너 내부에서 다시 입력해주어야 한다.