systemd経由でproxyの設定を書き、docker build時に--build-arg
を使用したが、apt-getに失敗した
環境
環境は以下の通り
Host: ubuntu 16.04-1
container: ubuntu:16.04
docker 17.12-1ce
docker-compose
対策
1. $HOME/.docker/config.jsonにproxy設定を記載する
config.json
{
"proxies":
{
"default":
{
"httpProxy": "http://proxy.example.co.jp:8080",
"httpsProxy": "http://proxy.example.co.jp:8080"
}
}
}
2. dns設定systemd経由で記載する
systemd起動のDockerでdnsオプションを有効にする
3. docker-composeの場合はargsを用いる
使用しているdocker-composeではconfig.jsonの結果が反映されないかった。
githubにてissue #5601が上がっていて、1.20.0にて修正されるらしい。
手順
systemd経由でdockerのproxy設定を書く
/etc/systemd/system/docker.service.d/http-proxy.conf
/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
# 改行しない
Environment="HTTP_PROXY=http://proxy.example.co.jp:8080" "HTTPS_PROXY=http://proxy.example.co.jp:8080"
# systemdにconfファイルを読み直しさせる
$ sudo systemctl daemon-reload
# systemdに設定が反映されているか確認する
$ systemctl show --property=Environment docker
# docker daemonのリスタート
$ sudo systemctl restart docker
# dockerに設定が反映されているか確認する
$ docker info
FROM utuntu:16.04
RUN apt-get update -y && apt-get install -y wget
$ docker build --build-arg HTTP_PROXY=http://proxy.example.co.jp:8080 --build-arg HTTPS_PROXY=http://proxy.example.co.jp:8080 -t proxy_test .
切り分け
proxy設定がbuild時に見えているか?
->echoしてみる
FROM utuntu:16.04
RUN echo "$HTTP_PROXY, $HTTPS_PROXY"
RUN apt-get update -y && apt-get install -y wget
表示された!
$HTTP_PROXY
や$HTTPS_PROXY
に値は設定されているが、apt-getが失敗する。
apt-getにproxyの設定が反映されていない?
apt.confのproxy設定が反映されるか?
FROM utuntu:16.04
RUN echo -e "Acquire::http::proxy \"$HTTP_PROXY\";\nAcquire::https::proxy \"$HTTPS_PROXY\";" > /etc/apt/apt.conf
RUN apt-get update -y && apt-get install -y wget
反映された。
ただし--build-arg
を使って折角proxy設定をimageに含めないとしているのに入ってしまう。なるべく避けたい。
そこで、config.jsonを使用する。