Skip to main content

Docker 외부 연결을 위한 TCP 포트 2375 활성화 방법 (보안 주의)

·441 words·3 mins
미뇽
Author
미뇽
안녕하세요! 기술로 세상을 이롭게 만들고 싶은 개발자 미뇽입니다.
Table of Contents

VS Code의 Docker 확장 프로그램, Portainer와 같은 원격 관리 도구, 또는 CI/CD 파이프라인에서 Docker 호스트를 제어해야 할 때가 있습니다. 이를 위해서는 Docker 데몬이 외부의 TCP 연결을 수신하도록 설정해야 합니다.

이 가이드에서는 Linux(systemd 기반) 환경에서 Docker 데몬이 TCP 포트 2375를 통해 원격 연결을 허용하도록 설정하는 방법을 단계별로 안내합니다.

⚠️ 경고: 보안에 매우 민감한 설정입니다
#

본격적인 설정에 앞서, 이 작업의 심각한 보안 위험에 대해 반드시 인지해야 합니다.

아무런 암호화(TLS) 조치 없이 Docker 데몬 포트를 외부에 노출하는 것은 서버의 root 권한을 외부에 그대로 공개하는 것과 같습니다. 해당 포트에 접근할 수 있는 사람은 누구나 Docker를 통해 서버의 모든 파일을 읽고 수정하며, 임의의 컨테이너를 실행하여 시스템을 완전히 장악할 수 있습니다.

따라서 아래의 설정은 다음과 같은 환경에서만 제한적으로 사용해야 합니다.

  • 방화벽으로 철저하게 격리된 완전한 신뢰 네트워크 내부
  • 개인 학습 또는 개발 목적으로 사용하는 단기 테스트 환경

공용 네트워크(인터넷)에 서버가 노출되어 있거나, 신뢰할 수 없는 사용자가 접근할 수 있는 환경에서는 절대 이 방식을 사용해서는 안 됩니다. 프로덕션 환경에서는 반드시 TLS 인증서를 사용하여 Docker 소켓을 암호화하는 보안 조치가 필요합니다.

설정 절차
#

위의 보안 경고를 충분히 숙지하셨다면, 아래 절차에 따라 설정을 진행할 수 있습니다.

daemon.json 파일 생성 또는 수정
#

Docker 데몬의 동작을 제어하는 설정 파일을 수정하여 TCP 소켓을 사용하도록 지시합니다.

  1. /etc/docker/daemon.json 파일을 생성하거나 엽니다.
sudo nano /etc/docker/daemon.json
  1. 아래 내용을 파일에 입력합니다. 기존에 사용하던 로컬 유닉스 소켓(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)합니다.

  1. override.conf 파일을 생성합니다.
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/override.conf
  1. 아래 내용을 파일에 입력합니다. 이는 Docker 데몬이 실행될 때 추가적인 -H 옵션 없이, 오직 daemon.json 파일의 설정을 따르도록 강제하는 역할을 합니다.
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

설정 적용 및 Docker 재시작
#

  1. 수정된 systemd 설정을 시스템에 다시 로드합니다.
sudo systemctl daemon-reload
  1. 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를 적용하여 통신을 암호화하시기 바랍니다.


참조