2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プロキシ環境下の Docker

Last updated at Posted at 2020-10-27

Docker おじさんです。

今回は
「顧客の本番環境がプロキシを通さないとインターネットに出れないことが判明した!!!」
という状況で焦らないためのメモ。

Docker のインストール

Debian / Ubuntu 前提で。

プロキシ環境下なので以下は普通に通らないと思うが、~/.bashrc とかで環境変数 http_proxy などを設定しても sudo すると環境変数は引き継がれないのでそのままでは通らない。

$ sudo apt-get install docker.io

sudo-E オプションを付ければ環境変数を引き継げば通るが毎回 -E をつけるのが面倒なので、別の方法として apt の設定ファイルを書いてしまったほうが楽。

/etc/apt/apt.conf.d/00-proxy
Acquire::http::Proxy "http://{HOST}:{port}";
Acquire::https::Proxy "http://{HOST}:{port}";

RHEL / CentOS の人は yum 用の設定方法があると思うので適当にググってやっていって欲しい。

Docker Engine

docker pull などでイメージを落としてくる場合は Docker Engine にプロキシ設定をする必要がある。

単純に環境変数 HTTP_PROXY HTTPS_PROXY を設定すればいいのだが、最近は Systemd で動いていることがほとんどだと思うので Systemd の設定ファイルで環境変数を指定するのが手っ取り早い。

/lib/systemd/system/docker.service
[Service]
Environment=HTTP_PROXY=http://{HOST}:{port}
Environment=HTTPS_PROXY=http://{HOST}:{port}

Docker イメージのビルド時

Docker イメージのビルド時に限らないが、 apt-get install などでインターネットに出たい場合は、そのツールひとつひとつにプロキシ設定をする必要がある。

apt-get や pip などは環境変数を設定するだけでプロキシを通ってくれるので、とりあえず環境変数を設定しておき、個別に対応が必要なツールについては個別に対応していく、となる。ビルド時に環境変数を設定するには Dockerfile に環境変数を指定してもいいが、ARG を使うのがよさそう。

例えば Docker Compose の設定ファイルで args を指定する場合は、サービスの build オプションを以下のように指定する。

docker-compose.yml
  build:
    context: .
    args:
      - http_proxy=http://{HOST}:{port}
      - https_proxy=http://{HOST}:{port}
      - HTTP_PROXY=http://{HOST}:{port}
      - HTTPS_PROXY=http://{HOST}:{port}

ツールによって対応している環境変数名が大文字だったり小文字だったりするので、両方指定しておいたほうが良い。
(例えば apt-get は大文字の HTTP_PROXY を指定しても認識してくれない)

Docker コンテナ起動時

コンテナ起動時はビルド時と同様にツールひとつひとつにプロキシ設定をする必要があるため、個別対応以外で出来ることといえば環境変数を設定するだけとなる。

コンテナ起動時に毎回環境変数を指定するのは手間なので、 ~/.docker/config.json を書いておくとコンテナ内に HTTP_PROXY などを自動で設定してくれる機能を使うと楽。

~/.docker/config.json
{
  "proxies": {
    "default": {
      "httpProxy": "http://{HOST}:{port}",
      "httpsProxy": "http://{HOST}:{port}"
    }
  }
}

Configure Docker to use a proxy server | Docker Documentation

[追記] これ、どうやら Docker Compose のときには使えないっぽい・・・?

その他

Docker 以外の設定で環境変数では対応できないやつ (git とか curl とか boto3 とか) そのへんはググって個別によしなに設定する。

2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?