認証プロキシ+独自リゾルバの環境でDockerデーモンが正常に動かない(未解決)

目次

事象

Dockerデーモンが外部アクセスするような操作(pull とか)を実行する際、下記のようなエラーが発生する。

Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 3.229.227.53:443: i/o timeout
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded

環境

項目
OS Ubuntu 20.04 Linux 5.11.0-27
Docker 20.10.11

設定値

項目
DNSサーバ 192.0.2.254
プロキシ http://192.0.2.253:8080
プロキシユーザ user
プロキシユーザパスワード Passw0rd

やったこと

プロキシサーバ環境変数の設定

~/.zshrc

export http_proxy=http://user:Passw0rd@192.0.2.253:8080
export https_proxy=http://user:Passw0rd@192.0.2.253:8080
export HTTP_PROXY=http://user:Passw0rd@192.0.2.253:8080
export HTTPS_PROXY=http://user:Passw0rd@192.0.2.253:8080

Dockerデーモンが使用するDNSサーバの設定

/etc/docker/daemon.json

{
    "dns": [
        "192.0.2.254"
    ]
}

Dockerデーモンに渡すプロキシサーバ変数の設定

/etc/systemd/system/docker.service.d/override.conf

[Service]
Environment='HTTP_PROXY=http://user:Passw0rd@192.0.2.253:8080' 'HTTPS_PROXY=http://user:Passw0rd@192.0.2.253:8080'

ユーザごとのDockerで使用するプロキシサーバ変数の設定

~/.docker/config.json

{
    "proxies": {
        "default": {
            "httpProxy": "http://user:Passw0rd@192.0.2.253:8080",
            "httpsProxy": "http://user:Passw0rd@192.0.2.253:8080"
        }
    }
}

まとめ

  • 認証プロキシつらい
  • パブリックDNSを使わせてほしい
  • 誰もこの環境で困っていないのだろうか……