VS Code의 Docker 확장 프로그램, Portainer와 같은 원격 관리 도구, 또는 CI/CD 파이프라인에서 Docker 호스트를 제어해야 할 때가 있습니다. 이를 위해서는 Docker 데몬이 외부의 TCP 연결을 수신하도록 설정해야 합니다.
이 가이드에서는 Linux(systemd 기반) 환경에서 Docker 데몬이 TCP 포트 2375를 통해 원격 연결을 허용하도록 설정하는 방법을 단계별로 안내합니다.
⚠️ 경고: 보안에 매우 민감한 설정입니다#
본격적인 설정에 앞서, 이 작업의 심각한 보안 위험에 대해 반드시 인지해야 합니다.
아무런 암호화(TLS) 조치 없이 Docker 데몬 포트를 외부에 노출하는 것은 서버의 root 권한을 외부에 그대로 공개하는 것과 같습니다. 해당 포트에 접근할 수 있는 사람은 누구나 Docker를 통해 서버의 모든 파일을 읽고 수정하며, 임의의 컨테이너를 실행하여 시스템을 완전히 장악할 수 있습니다.
따라서 아래의 설정은 다음과 같은 환경에서만 제한적으로 사용해야 합니다.
- 방화벽으로 철저하게 격리된 완전한 신뢰 네트워크 내부
- 개인 학습 또는 개발 목적으로 사용하는 단기 테스트 환경
공용 네트워크(인터넷)에 서버가 노출되어 있거나, 신뢰할 수 없는 사용자가 접근할 수 있는 환경에서는 절대 이 방식을 사용해서는 안 됩니다. 프로덕션 환경에서는 반드시 TLS 인증서를 사용하여 Docker 소켓을 암호화하는 보안 조치가 필요합니다.
설정 절차#
위의 보안 경고를 충분히 숙지하셨다면, 아래 절차에 따라 설정을 진행할 수 있습니다.
daemon.json
파일 생성 또는 수정#
Docker 데몬의 동작을 제어하는 설정 파일을 수정하여 TCP 소켓을 사용하도록 지시합니다.
/etc/docker/daemon.json
파일을 생성하거나 엽니다.
sudo nano /etc/docker/daemon.json
- 아래 내용을 파일에 입력합니다. 기존에 사용하던 로컬 유닉스 소켓(
unix:///var/run/docker.sock
)을 함께 명시해야, 해당 서버에서docker ps
와 같은 로컬 명령어가 계속 동작합니다.
{
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
Docker 서비스 설정 수정 (systemd
)#
daemon.json
파일의 hosts
설정이 systemd
서비스 파일의 기본 실행 옵션과 충돌하는 것을 방지하기 위해, 서비스 설정을 재정의(override)합니다.
override.conf
파일을 생성합니다.
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/override.conf
- 아래 내용을 파일에 입력합니다. 이는 Docker 데몬이 실행될 때 추가적인
-H
옵션 없이, 오직daemon.json
파일의 설정을 따르도록 강제하는 역할을 합니다.
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
설정 적용 및 Docker 재시작#
- 수정된
systemd
설정을 시스템에 다시 로드합니다.
sudo systemctl daemon-reload
- Docker 서비스를 재시작하여 모든 변경사항을 적용합니다.
sudo systemctl restart docker.service
설정 확인#
Docker 데몬이 2375번 포트에서 정상적으로 수신 대기하고 있는지 확인합니다.
sudo netstat -tulnp | grep 2375
아래와 같이 dockerd
프로세스가 0.0.0.0:2375
에서 수신(LISTEN)하고 있다면 성공입니다.
tcp6 0 0 :::2375 :::* LISTEN 12345/dockerd
원격 접속 확인#
이제 다른 컴퓨터에서 Docker 클라이언트를 사용하여 원격으로 접속을 테스트합니다.
# -H 플래그를 사용하여 원격 Docker 호스트를 지정합니다.
docker -H tcp://<DOCKER_HOST_IP>:2375 ps
위 명령어 실행 시, 원격 서버의 컨테이너 목록이 정상적으로 출력된다면 모든 설정이 완료된 것입니다.
마무리하며#
이 가이드를 통해 Docker 데몬의 원격 접속을 활성화하는 방법을 알아보았습니다. 이 설정은 원격 관리의 편의성을 크게 향상시키지만, 그만큼 큰 보안 책임이 따릅니다. 다시 한번 강조하지만, 이 설정은 반드시 신뢰할 수 있는 격리된 네트워크 내에서만 사용하고, 외부 노출이 필요한 경우에는 반드시 TLS를 적용하여 통신을 암호화하시기 바랍니다.
참조
- Docker 공식 문서 - Protect the Docker daemon socket (TLS 설정 방법): https://docs.docker.com/engine/security/protect-access/