yq v4 で Docker daemon.json のプロキシ項目を編集する
Mike Farah の yq v4 を使い、既存の daemon 設定を保ったままプロキシ文字列を挿入し、確認できる JSON 候補を生成します。
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.jsonHTTP プロキシ一覧は、公開 registry への通信が公開の中継サーバーを使う可能性がある場合に、2 つの HTTP URL 値の候補を提供します。内部向けの除外設定はそのまま残してください。strenv は各値を文字列として読み取ります。env は YAML 値として解釈するため、この URL と除外の項目には不要です。strenv の内側の環境変数名にドル記号の接頭辞は付きません。
3 つの項目を代入すれば、proxies の他のメンバーや無関係な最上位設定も保持されます。-o=json オプションは Docker が期待する形式のまま出力します。yq という名前の別プログラムでは式言語が異なる場合があります。
マシンの通常の設定手順で有効なファイルを置き換える前に、候補を確認してください。シェルのリダイレクトで入力ファイルへ直接書き戻すと、yq が読む前に切り詰められることがあります。
これらのハイフン付きの項目名は Docker Engine の daemon を設定します。Docker Desktop は独自のプロキシ設定を使い、CLI のコンテナ環境向けプロキシオブジェクトは別のスキーマを持ちます。