[Linux] docker with proxy

最近 docker で環境が提供されたりすることもあるのですが、proxy の壁の中(?) に居ると docker を使う時に越えられない壁になることが多々あります。proxy で壁を乗り越えるための覚書です。

proxy 設定は通常環境変数で設定されていて勝手にアプリケーションが取っていってくれるので、一度設定したら proxy の存在すら忘れてアクセスしてしまいがちですが、docker では残念ながらそんなヌルい人たちを置いてけぼりにします。

docker の proxy 設定は「dockerd に対する設定」と「docker client に対する設定」の両方が必要です。

dockerd に対する設定

sudo systemctl edit docker で以下のファイルを編集します。

/etc/systemd/system/docker.service.d/override.conf:
[Service]
Environment = 'http_proxy=http'//[proxy-ip]:[proxy-port]/' 'https_proxy=http://[proxy-ip]:[proxy-port]/' 'no_proxy=127.0.0.localhost'

以下のコマンドを実行して dockerd を再起動し、設定が反映していれば成功です。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo docker info
...
HTTP_PROXY: http://[proxy-ip]:[proxy-port]/
HTTPS_PROXY: http://[proxy-ip]:[proxy-port]/
NO_PROXY: 127.0.0.1,localhost

docker client に対する設定

docker client はユーザ別の設定ファイルを作成して、その中に以下のファイルを作成して設定を JSON 形式で記述します。

~/.docker/config.json:
{
    "proxies": {
        "default": {
            "httpProxy":  "http://[proxy-ip]:[proxy-port]/",
            "httpsProxy": "http://[proxy-ip]:[proxy-port]/",
            "noProxy":    "127.0.0.1,localhost"
        }
    }
}

この設定ファイルを在処を知らせるために環境変数を設定しておきます。

export DOCKER_CONFIG=~/.docker

docker 内で apt を使う設定

Dockerfile に環境変数を継承するか、/etc/apt/apt.conf に proxy 情報を書きます。
Dockerfileの場合、以下を追加します。

ARG HTTP_PROXY
ENV http_proxy ${HTTP_PROXY}
ARG HTTPS_PROXY
ENV https_proxy ${HTTPS_PROXY}

/etc/apt/apt.conf の場合、apt.conf を作成しておき、Dockerfile に以下を追加します。

COPY apt.conf /etc/apt/

apt.conf の作成例:

Acquire::http::No-Cache true";
Acquire::http::Pipeline-Depth 0";
Acquire::http::proxy  "http://[proxy-ip]:[proxy-port]/";
Acquire::https::proxy "http://[proxy-ip]:[proxy-port]/";
Acquire::ftp::proxy   "http://[proxy-ip]:[proxy-port]/";

コメント

タイトルとURLをコピーしました