Docker에서 프록시를 설정하는 방법 (컨테이너, Compose 및 빌드)
업데이트:
단일 호스트 서버에서 멀티 컨테이너 크롤러, 자동화 워커 또는 DePIN 노드를 실행할 때, 컨테이너별로 HTTP_PROXY 및 HTTPS_PROXY 환경 변수를 전달하면 호스트 시스템의 라우팅 테이블을 수정하지 않고도 각 서비스가 VinaProxy의 전용 고정 IPv4 주소를 통해 외부로 통신할 수 있습니다.
ENV HTTP_PROXY=http://user:pass@ip:port HTTPS_PROXY=http://user:pass@ip:port- 1개 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
- 1개 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
Docker의 3가지 프록시 구성 범위 이해하기
Docker는 컨테이너 런타임 트래픽, 이미지 빌드 트래픽, 데몬 레지스트리 풀 트래픽을 분리하여 처리합니다:
| Docker 범위 | 구성 위치 | 라우팅 대상 |
|---|---|---|
| 1. 컨테이너 런타임 (가장 일반적) | docker run -e HTTP_PROXY=... 또는 Compose environment: | 해당 컨테이너 내부 애플리케이션에서 발생하는 모든 아웃바운드 트래픽 |
2. 이미지 빌드 (docker build) | --build-arg HTTP_PROXY=http://user:pass@ip:port | 빌드 중 패키지 매니저(apt, pip, npm)의 다운로드 요청 |
3. Docker 데몬 (dockerd) | /etc/systemd/system/docker.service.d/http-proxy.conf | 레지스트리에 대한 docker pull 및 docker push 요청 |
Docker Compose 모범 사례 및 NO_PROXY 규칙
- 모든 Linux CLI 도구 및 런타임이 인식할 수 있도록 대문자(
HTTP_PROXY,HTTPS_PROXY,NO_PROXY)와 소문자(http_proxy,https_proxy,no_proxy) 변수를 모두 설정 - 컨테이너 간 통신이 로컬 브리지 네트워크에 머물도록 내부 Docker Compose 서비스 이름(예:
NO_PROXY=localhost,127.0.0.1,redis,postgres)을 반드시 등록 - 공개 이미지의
Dockerfile내에ENV로 프록시 비밀번호를 하드코딩하지 말고, 런타임에.env또는docker-compose.yml을 통해 주입
단계별 안내
- 1
프록시를 http://user:pass@ip:port 형식으로 변환
프록시 포맷 변환기를 사용하여 VinaProxy의
ip:port:user:pass형식을 표준 URL로 변환합니다. - 2
docker-compose.yml에 환경 변수 추가
서비스의
environment:항목 아래에HTTP_PROXY,HTTPS_PROXY,http_proxy,https_proxy및NO_PROXY=localhost,127.0.0.1,redis,db를 정의합니다. - 3
컨테이너 시작 또는 재생성
docker compose up -d를 실행하여 새로운 환경 변수를 적용합니다. - 4
컨테이너 내부에서 출구 IP 확인
docker exec -it <container> curl -s https://vinaproxy.com/api/my-ip를 실행하여 컨테이너가 프록시 IP로 통신하는지 확인합니다.
자주 묻는 질문
HTTP_PROXY 설정 후 컨테이너가 Redis나 Postgres 컨테이너에 접근하지 못하는 이유는 무엇인가요?
NO_PROXY가 없으면 HTTP 클라이언트가 redis나 db와 같은 내부 서비스 이름도 외부 프록시를 통해 접근하려고 시도합니다. NO_PROXY=localhost,127.0.0.1,redis,db(및 소문자 no_proxy)를 추가하여 내부 브리지 호스트에 대한 프록시를 우회하세요.
단일 VPS에서 20개의 컨테이너에 각각 서로 다른 20개의 프록시를 할당할 수 있나요?
네, 가능합니다. 각 컨테이너 서비스에(또는 개별 .env 변수를 전달하여) 고유한 http://user:pass@ip:port 문자열을 지정하면 됩니다.
왜 대문자와 소문자 프록시 변수를 둘 다 설정해야 하나요?
libcurl 등 일부 Linux 라이브러리는 소문자 http_proxy / https_proxy를 먼저 확인하는 반면, Go 및 Node 도구는 대문자 HTTP_PROXY / HTTPS_PROXY를 확인하기 때문입니다.
모든 Docker 컨테이너에 전용 고정 IP 할당
7개국 무제한 전용 IPv4 및 고정 ISP 프록시를 즉시 이용할 수 있습니다.
Docker 프록시 구매