🐳 SSH 연결 문제와 Docker 설정: 원인부터 해결까지
Docker 사용 중 서버에 SSH로 접속하여 도커 명령어를 실행하려고 할 때 접속이 끊기는 문제가 발생했습니다. 이 문제는 Docker의 IP 대역 충돌에서 비롯되었습니다. 앞으로 이러한 오류를 방지하기위해 이번 포스팅에서는 문제의 원인을 깊이 이해하고, 이를 해결하기 위한 방법인 daemon.json
설정 수정절차를 단계별로 알아보겠습니다.
1. 🌟 문제 상황
문제
로컬 PC에서 서버에 SSH로 접속 후 Docker를 실행하면 접속이 끊기거나 오류가 발생.
이 상황은 일반적으로 다음 이유 때문에 발생합니다.
- Docker의 기본 네트워크 IP 대역인
172.17.0.0/16
이 로컬 네트워크의 IP 대역과 겹칠 때 충돌. - 충돌로 인해 Docker의 브리지 네트워크와 SSH 연결 간에 패킷이 잘못 라우팅되거나 차단됨.
2. 🔍 원인 분석
2.1 Docker 네트워크 기본값 이해하기
Docker는 컨테이너 간 통신을 위해 가상 네트워크를 생성합니다. 기본적으로 다음과 같은 네트워크 대역을 사용합니다.
- 브리지 네트워크 IP 대역:
172.17.0.0/16
- Docker는 브리지 네트워크를 통해 컨테이너와 호스트 간 통신을 중계.
2.2 브리지 네트워크란?
브리지 네트워크는 호스트 머신과 Docker 컨테이너 간 가상 네트워크입니다.
- 기본적으로 Docker는 브리지 네트워크를 통해 컨테이너 간 통신과 외부 네트워크 연결을 관리합니다.
- 호스트 머신의 네트워크와 독립적으로 동작하므로 네트워크 격리를 제공합니다.
예:
- 호스트 머신: 192.168.1.10
- Docker 컨테이너 네트워크: 172.17.0.0/16
이처럼 서로 다른 대역을 가지므로 네트워크 충돌이 없어야 하지만, 로컬 네트워크 대역이 중복되면 문제가 발생합니다.
2.3 충돌의 영향
- SSH 연결 차단: 네트워크 충돌로 인해 SSH 연결 패킷이 손실될 수 있습니다.
- Docker 작동 문제: 네트워크 충돌은 Docker 컨테이너 간 통신에도 문제를 유발합니다.
3. 🛠 해결 방법: daemon.json
설정
문제를 해결하려면 Docker의 네트워크 IP 대역을 변경하여 충돌을 방지해야 합니다. 이를 위해 /etc/docker/daemon.json
파일을 수정합니다.
3.1 daemon.json
기본 구조
daemon.json
은 Docker 데몬의 설정 파일로, JSON 형식으로 작성됩니다. 이 파일을 통해 Docker의 기본 동작을 커스터마이징할 수 있습니다.
3.2 주요 설정 항목
아래는 문제 해결과 관련된 주요 설정 항목입니다:
data-root
: Docker 데이터 경로를 변경.bip
: 브리지 네트워크 IP 대역 설정.default-address-pools
: Docker Compose의 네트워크 대역 설정.insecure-registries
: HTTP로 접근 가능한 프라이빗 레지스트리 설정.registry-mirrors
: Docker Hub 미러 설정.
4. 💻 실습: daemon.json
수정
4.1 설정 파일 열기
sudo vi /etc/docker/daemon.json
4.2 수정 내용
{
// Docker Root 경로 설정
"data-root": "/data/docker",
// 기본 Docker 브리지 네트워크 설정 (충돌 방지용 IP 대역)
"bip": "192.172.100.1/24",
// Docker Compose의 기본 네트워크 대역 설정
"default-address-pools": [
{
"base": "192.172.100.1/16",
"size": 24
}
],
// Docker 레지스트리 HTTP 연결 허용
"insecure-registries": ["10.20.100.1:5000"],
// Docker Hub 미러 설정
"registry-mirrors": ["https://<my-docker-mirror-host>"]
}
설명
bip
: Docker 브리지 네트워크의 기본 IP 대역을 변경.default-address-pools
: Docker Compose에서 기본 네트워크 대역을 별도로 설정.insecure-registries
: HTTP로 동작하는 프라이빗 레지스트리를 허용.registry-mirrors
: Docker Hub 대안 미러 설정.
5. 🔄 적용 및 확인
5.1 Docker 데몬 재시작
설정을 저장한 후 Docker 데몬을 재시작합니다:
sudo systemctl restart docker
5.2 설정 적용 확인
변경된 네트워크 대역을 확인하려면 다음 명령어를 실행:
docker network inspect bridge
출력에서 Subnet
이 새로 설정한 대역으로 변경되었는지 확인합니다:
{
"Subnet": "192.172.100.1/24"
}
6. ⚠️ 주의 사항
- 서버 재부팅 필요 여부: 일부 환경에서는 Docker 데몬 재시작만으로 충분하지만, 네트워크 충돌로 인해 시스템 재부팅이 필요할 수도 있습니다.
- 구성 파일 JSON 유효성 검사: JSON 파일 수정 시 유효한 형식인지 반드시 확인.
- 기존 네트워크 삭제: 기존 컨테이너의 네트워크 설정은 변경되지 않을 수 있으므로 필요시 네트워크를 삭제 후 다시 생성:
docker network rm <network_name>
7. 🚀 요약 및 결론
- 원인: Docker와 로컬 네트워크 간의 IP 대역 충돌로 SSH 연결이 차단됨.
- 해결책:
daemon.json
파일에서bip
및default-address-pools
설정으로 네트워크 대역 변경. - 주요 명령어:
- 설정 파일 열기:
sudo vi /etc/docker/daemon.json
- Docker 재시작:
sudo systemctl restart docker
- 네트워크 확인:
docker network inspect bridge
- 설정 파일 열기:
위 내용을 따라가며 설정을 적용하면 Docker 네트워크 충돌 문제를 깔끔하게 해결할 수 있습니다. 더 궁금한 점이 있으면 댓글로 남겨주세요! 😄
'Docker' 카테고리의 다른 글
[Docker]Docker를 이용해 MariaDB 설치하기 (0) | 2024.11.22 |
---|---|
[Docker] 리눅스에서 Docker 설치 및 실행 방법 (0) | 2024.11.19 |
[Docker] Dockerfile 작성법 (0) | 2024.11.18 |
[Docker] Docker란 무엇인가? (5) | 2024.11.10 |
[Docker] 네트워크 변경(네트워크 중복으로 인한 접속 불가능), HTTP 허용, Root 경로 수정 daemon.json 설정 (0) | 2023.12.04 |