daemon.json 파일에는 이미 DNS, 저장소 또는 로깅 설정이 들어 있을 수 있습니다. 프록시를 바꿀 때는 그 키들을 그대로 유지해야 합니다.

Mike Farah의 yq v4로 각 필드를 따로 지정하고 별도의 후보 파일을 작성합니다.

http_proxy='http://proxy.example:8080' \
https_proxy='http://proxy.example:8080' \
no_proxy='localhost,127.0.0.1,.internal.example' \
yq -o=json '
  .proxies."http-proxy" = strenv(http_proxy) |
  .proxies."https-proxy" = strenv(https_proxy) |
  .proxies."no-proxy" = strenv(no_proxy)
' /etc/docker/daemon.json > daemon.proxy-candidate.json

HTTP 프록시 목록은 공개 registry 트래픽이 공개 중계자를 쓸 수 있는 경우 두 HTTP URL 값의 후보를 제공합니다. 내부 우회 항목은 그대로 두십시오. strenv는 각 값을 문자열로 읽습니다. env는 대신 YAML 값으로 해석하므로 이 URL 및 우회 필드에는 필요하지 않습니다. strenv 안의 환경 변수 이름에는 달러 접두사가 없습니다.

세 필드를 지정하면 proxies의 다른 구성원과 무관한 최상위 설정도 유지됩니다. -o=json 옵션은 Docker가 기대하는 형식으로 출력을 유지합니다. yq라는 다른 프로그램은 식 언어가 다를 수 있습니다.

머신의 일반적인 구성 절차로 활성 파일을 교체하기 전에 후보를 검토하십시오. 셸 리다이렉션으로 입력 파일에 직접 다시 쓰면 yq가 읽기 전에 파일이 잘릴 수 있습니다.

이 하이픈이 들어간 필드 이름은 Docker Engine의 daemon을 구성합니다. Docker Desktop은 자체 프록시 설정을 사용하고, CLI의 컨테이너 환경 프록시 객체는 다른 스키마를 가집니다.

관련 글