우분투 서버에 Docker를 설치하고 윈도우에서 원격 접속까지 마치면, 드디어 앱을 올릴 준비가 끝납니다. 다만 이 과정에서 초보자 대부분이 'SSH connection refused'와 네트워크 접속 문제로 막히는데, 이 글에서는 제가 실제로 겪고 해결한 순서 그대로 짚어드립니다. 결론부터 말하면 원인은 두 가지, VirtualBox의 네트워크 모드와 SSH 서버 미설치입니다.
이 글은 3편(VirtualBox 가상머신 구축)에서 이어집니다. 우분투 설치가 아직이라면 3편을 먼저 진행하세요.
원격 접속이 안 되는 진짜 이유 — NAT vs 브리지 모드
윈도우에서 VM에 접속이 안 되는 첫 번째 원인은 VirtualBox의 기본 네트워크 설정(NAT) 때문입니다. VM에서 ip a 명령으로 주소를 확인했을 때 10.0.2.15처럼 나온다면, 이건 VM 안에서만 유효한 주소라 외부(윈도우)에서 접속이 막혀 있는 상태입니다. NAT는 'VM에서 인터넷으로 나가는' 건 되지만 '밖에서 VM으로 들어오는' 건 기본적으로 차단하기 때문이죠.
해결은 네트워크를 '브리지(Bridged) 모드'로 바꾸는 것입니다. 브리지 모드는 VM이 공유기로부터 진짜 IP를 직접 받게 해줘서, 집 안 다른 기기처럼 접속할 수 있게 됩니다. 방법은 이렇습니다. 먼저 VM에서 sudo poweroff로 종료한 뒤, VirtualBox에서 해당 VM 선택 → 설정 → 네트워크로 들어갑니다. '어댑터 1' 탭에서 '다음에 연결됨'을 NAT에서 '브리지 어댑터'로 바꾸고, 아래 이름에서 지금 인터넷을 쓰는 랜카드나 와이파이 어댑터를 고른 뒤 확인을 누릅니다. VM을 다시 켜고 ip a를 치면 이번엔 192.168.x.x나 172.30.x.x처럼 공유기 대역의 주소로 바뀌어 있을 겁니다. 이 주소가 실제 접속용 IP이니 메모해두세요.
connection refused 에러 해결 — SSH 서버 설치
브리지 모드로 바꿨는데도 윈도우에서 ssh 접속 시 'Connection refused'가 뜬다면, 원인은 명확합니다. VM 안에 SSH 서버가 켜져 있지 않은 것입니다. 'Connection refused'는 'IP까지는 찾아갔는데 22번 포트에서 응답하는 프로그램이 없다'는 뜻인데, 대개 우분투 설치 때 'Install OpenSSH server' 체크를 놓친 경우입니다. 저도 정확히 이 이유로 막혔습니다.
다시 설치할 필요는 전혀 없고, VM 콘솔(검은 화면)에서 로그인한 뒤 아래 명령으로 SSH 서버를 켜면 됩니다.
sudo apt update
sudo apt install openssh-server -y
sudo systemctl enable --now ssh
sudo systemctl status ssh
마지막 status 명령에서 초록색으로 active (running)이 보이면 성공입니다(빠져나올 땐 q). 이제 윈도우에서 PowerShell을 열고 ssh 사용자명@아까메모한IP를 입력하면, 첫 접속이라 지문(fingerprint) 확인 메시지가 뜨는데 yes를 입력하고 비밀번호를 넣으면 연결됩니다. 검은 콘솔 대신 윈도우 창에서 복사·붙여넣기를 하며 작업할 수 있어 훨씬 편해집니다.
Docker 설치와 sudo 없이 쓰기 설정
원격 접속이 되면 이제 Docker를 공식 방식으로 설치합니다. 아래 명령을 순서대로 실행하면 되는데, 각 단계는 하나씩 실행하며 빨간 에러가 없는지 확인하고 넘어가세요. 참고로 리눅스는 성공 시 아무 메시지도 안 뜨는 경우가 많으니, '조용하면 성공'이라고 생각하면 됩니다.
먼저 사전 패키지와 Docker 공식 저장소를 등록합니다.
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
그다음 Docker 본체를 설치하고 정상 작동을 확인합니다.
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world

마지막 명령에서 Hello from Docker!라는 메시지가 뜨면 설치 완료입니다. 끝으로 매번 sudo를 붙이기 번거로우니, sudo usermod -aG docker $USER로 내 계정을 docker 그룹에 추가하고 한 번 로그아웃 후 재접속하면, 이후로는 docker 명령을 sudo 없이 쓸 수 있습니다.
다음 편에서는 이 검은 터미널 대신 웹 화면으로 컨테이너를 관리하게 해주는 Portainer를 설치합니다. 최근 버전에서 새로 생긴 'setup token' 함정과 해결법까지 함께 다룹니다. → 5편. Portainer로 웹에서 컨테이너 관리하기