Файл daemon.json может уже содержать настройки DNS, хранилища или журналирования. При изменении прокси эти ключи должны сохраниться.

С yq v4 от Mike Farah назначьте отдельные поля и запишите отдельного кандидата:

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-прокси предлагает кандидатов для двух значений HTTP URL, когда публичный трафик к registry может идти через публичных посредников; внутренние исключения сохраните. strenv читает каждое значение как строку. env же разбирает значения YAML, что для этих полей URL и исключений не нужно. Имя переменной окружения внутри strenv не имеет префикса в виде доллара.

Назначение трёх полей сохраняет остальных членов proxies, а также несвязанные настройки верхнего уровня. Опция -o=json оставляет вывод в формате, которого ожидает Docker. У другой программы под названием yq может быть иной язык выражений.

Проверьте кандидата, прежде чем заменить активный файл обычным процессом настройки машины. Запись напрямую обратно во входной файл через перенаправление оболочки может обрезать его раньше, чем yq его прочитает.

Эти имена полей с дефисом настраивают daemon Docker Engine. Docker Desktop использует собственные настройки прокси, а объект прокси окружения контейнера в CLI имеет другую схему.

Похожие статьи