내 모든 Docker 컨테이너가 내 프록시를 사용하도록 하려면 어떻게 해야 하나요?

내 모든 Docker 컨테이너가 내 프록시를 사용하도록 하려면 어떻게 해야 하나요?

저는 기업 프록시 뒤에 있는 Debian Jessie에서 도커를 실행하고 있습니다. Docker 이미지를 다운로드하려면 내 파일에 다음을 추가해야 합니다./etc/defaults/docker

http_proxy="http://localhost:3128/"

이것이 작동하는지 확인할 수 있습니다.

그러나 내 컨테이너 내에서 interwebz에 액세스하려면 --net host다음 환경 변수를 사용하여 모든 세션을 시작한 후 설정해야 합니다.

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}

이상적으로는 컨테이너가 호스트 네트워크를 필요로 하지 않고 프록시에 대해 알지 않기를 바랍니다(즉, 컨테이너의 포트 20, 80, 443에 대한 모든 아웃바운드 호출이 호스트의 프록시 포트를 통해 이동함). 그게 가능합니까?

실패하면 이러한 환경 변수가 로컬로 설정되지만 이미지의 일부로 내보내지지 않도록 하는 사이트 설정이 가능합니까?

업데이트: 나는 이러한 것들을 --env http_proxy=...etc로 전달할 수 있다는 것을 알고 있지만 그것은 투박합니다. 별칭을 사용하지 않고도 시스템의 모든 사용자가 작동하도록 하고 싶습니다.

답변1

이 SO 답변을 참조하십시오:

호스트 서버는 투명 프록시를 수행할 수 있는 프록시(이 경우 오징어)를 실행하는 컨테이너를 실행합니다. 해당 컨테이너에는 프록시 서버로 NAT 트래픽을 보내는 몇 가지 iptables 규칙이 있습니다. 이는 컨테이너가 권한 있는 모드에서 실행되어야 함을 의미합니다.

호스트 서버에는 프록시 컨테이너를 통해 포트 80으로 향하는 프록시를 제외한 모든 컨테이너의 모든 트래픽을 다시 라우팅하는 IP 경로 테이블 항목도 포함되어 있습니다.

마지막 비트는 기본적으로 포트 80 트래픽의 경우 컨테이너에서 나머지 세계로의 경로가 프록시 컨테이너를 통과하여 NAT 및 투명 프록시에 대한 기회를 제공한다는 것을 의미합니다.

https://github.com/silarsis/docker-proxy

답변2

그만큼Docker 클라이언트 구성공식 문서에는 이 문제를 쉽게 해결하는 방법이 나와 있습니다.

~/.docker/config.json(또는 ) 파일 을 편집 %USERPROFILE%\.docker\config.json하고 다음 JSON 조각을 추가합니다.

{
    "proxies": {
        "default": {
            "httpProxy": "http://localhost:3128",
            "httpsProxy": "https://localhost:3128"
        }
    }
}

apt udpate이로써 Debian Docker 컨테이너 내부 실행이 실패하는 문제가 해결되었습니다 . 해당 json 파일에 프록시 설정을 추가하고 새 도커 컨테이너를 시작한 후 apt update작동하기 시작했습니다.

관련 정보