회사에서 폐쇄망 클라우드 서버에 Docker 설치할 일이 생겼다. 인터넷이 아예 안 되는 환경이라 생각보다 삽질을 많이 했고, 클로드랑 이러쿵 저러쿵 북치기 박치기 하면서 해결은 했는데 새롭게 알게 된 것들이 있어서 정리해둠.
환경
- 서버 OS: Rocky Linux 8, x86_64
- 네트워크: 완전 폐쇄망 (외부 인터넷 차단)
- SSH 포트: 2222 (기본 22 아님)
- 접속 유저: apuser
- 내 PC: Windows
폐쇄망 여부 확인하는 법
서버에 SSH 접속 후 아래 명령어로 확인할 수 있다.
# 외부로 패킷 날려보기
ping -c 3 8.8.8.8
# HTTP 통신 되는지
curl -I https://google.com --connect-timeout 5
# DNS 해석 되는지
nslookup google.com
전부 실패하면 완전 폐쇄망이다. ping은 되는데 curl이 안 되면 포트 제한이 있는 것.
기본 전략
폐쇄망이라 서버에서 dnf install docker-ce 같은 명령어로 직접 설치가 안 된다. dnf가 인터넷에서 패키지를 받아오는 방식인데 인터넷이 없으니까.
그래서 이렇게 한다:
- 인터넷 되는 내 PC에서 필요한 파일 전부 다운로드
- SCP로 서버에 파일 전송
- 서버에서 로컬 파일로 설치
SCP가 뭔지
SCP(Secure Copy Protocol)는 SSH를 이용해서 파일을 전송하는 방식이다. SSH랑 같은 포트를 사용하기 때문에 SSH가 되면 SCP도 된다.
scp -P [포트번호] [보낼파일] [유저명]@[서버IP]:[받을경로]
SSH 포트가 2222이면 SCP도 -P 2222 로 맞춰줘야 한다. (SSH는 소문자 -p, SCP는 대문자 -P 임)
SFTP랑 SCP 차이
SCP가 안 될 때 SFTP로 대신 시도해볼 수 있다. SFTP는 SSH 위에서 돌아가는 파일 전송 프로토콜인데, 서버 sshd_config에 아래 설정이 있어야 동작한다.
Subsystem sftp /usr/libexec/openssh/sftp-server
설정 확인하는 법:
sudo grep -E "Subsystem|PasswordAuthentication" /etc/ssh/sshd_config
오늘 작업한 서버는 Subsystem 설정이 이미 있었는데도 SFTP가 안 됐다. 이유는 아직 정확히 모르겠다.... 결국 SCP로 해결했다.
1. RPM 파일 받기
브라우저에서 아래 주소 접속 후 파일 직접 클릭해서 다운로드.
https://download.docker.com/linux/rhel/8/x86_64/stable/Packages/
받을 파일 5개:
containerd.io-1.7.27-3.1.el8.x86_64.rpm
docker-ce-cli-29.3.0-1.el8.x86_64.rpm
docker-ce-29.3.0-1.el8.x86_64.rpm
docker-buildx-plugin-0.31.1-1.el8.x86_64.rpm
docker-compose-plugin-5.1.1-1.el8.x86_64.rpm
버전 고를 때 주의할 점:
- docker-ce랑 docker-ce-cli는 버전 번호가 반드시 같아야 함
- docker-ce가 요구하는 containerd.io 최소 버전이 있음
- 예: docker-ce 29.3.0은 containerd.io >= 1.7.27 필요
- 나는 처음에 1.7.26 받았다가 의존성 오류남
- 설치 시도하면 오류 메시지에 필요한 버전이 나오니까 그걸 보고 맞춰서 다시 받으면 됨
2. SCP로 서버 전송
Windows PowerShell에서 실행. 파일을 한 줄로 묶어서 보내면 비밀번호를 한 번만 입력하면 된다.
scp -P 2222 `
C:\docker-files\containerd.io-1.7.27-3.1.el8.x86_64.rpm `
C:\docker-files\docker-ce-cli-29.3.0-1.el8.x86_64.rpm `
C:\docker-files\docker-ce-29.3.0-1.el8.x86_64.rpm `
C:\docker-files\docker-buildx-plugin-0.31.1-1.el8.x86_64.rpm `
C:\docker-files\docker-compose-plugin-5.1.1-1.el8.x86_64.rpm `
apuser@서버IP:~/
비밀번호 입력할 때 화면에 아무것도 안 보이는 게 정상이다. 다 치고 엔터 누르면 전송 시작됨.
처음 접속하는 서버면 아래처럼 물어보는데 yes 입력하면 된다.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
3. 서버에서 Docker 설치
SSH 접속 후:
# 파일 읽기 권한 부여 (없으면 Can not load RPM file 오류남)
sudo chmod 644 ~/*.rpm
# 설치
sudo dnf install -y --disablerepo="*" \
./containerd.io-1.7.27-3.1.el8.x86_64.rpm \
./docker-ce-cli-29.3.0-1.el8.x86_64.rpm \
./docker-ce-29.3.0-1.el8.x86_64.rpm \
./docker-buildx-plugin-0.31.1-1.el8.x86_64.rpm \
./docker-compose-plugin-5.1.1-1.el8.x86_64.rpm
여기서 --disablerepo="*" 옵션이 핵심이다. 이게 없으면 폐쇄망인데도 dnf가 외부 repo에 접근을 시도하고 타임아웃이 남. 이 옵션을 붙이면 외부 repo는 전부 무시하고 지금 지정한 로컬 파일만 보고 설치한다.
Complete! 뜨면 설치 완료.
4. Docker 서비스 시작
# 서비스 시작 + 부팅 시 자동 시작 등록
sudo systemctl enable --now docker
# 상태 확인
sudo systemctl status docker
# 버전 확인
docker --version
삽질 포인트 정리
문제 원인 해결
| containerd 의존성 오류 | docker-ce가 요구하는 버전보다 낮은 containerd 다운로드 | 오류 메시지에서 필요한 버전 확인 후 다시 받기 |
| Can not load RPM file | RPM 파일 읽기 권한 없음 | sudo chmod 644 *.rpm |
| dnf 설치 중 타임아웃 | 폐쇄망인데 외부 repo 접근 시도 | --disablerepo="*" 옵션 추가 |
| SFTP 접속 안 됨 | 원인 불명 (Subsystem 설정은 있었음) | SCP로 대신 전송 |
| tmp 폴더에 넣으려다가.. | tmp 폴더에 rpm 파일을 넣고 돌리는게 잘 안되는거 같았다 아무래도 권한 문제도 조금 있는듯 함. | 그냥 user 경로에 바로 넣어버리자 |
'DevOps' 카테고리의 다른 글
| Docker 기본 개념과 명령어 정리 (3) | 2026.03.25 |
|---|---|
| 사내 서버에서 Jenkins CI/CD 구축하기 (Synology NAS + Spring Boot + Windows) (0) | 2026.03.24 |