コンテナをビルドする際、aptのみプロキシサーバを経由させたかったため、aptの通信のみプロキシを通す方法を調べました。
Dockerfileに記載する内容
--build-arg
に指定した内容を元に、apt用のプロキシサーバの設定を行うようなDockerfileを作成します。
docker run
したときにもdocker build
したときと同じプロキシサーバを使う場合
自分の場合、docker run
でコンテナを実行する際にもそのプロキシを使用して欲しいため、/etc/apt/apt.conf.d/
にプロキシの設定を行なっています。
FROM ubuntu:20.04
ARG APT_PROXY
RUN if [ "$APT_PROXY" != "" ]; then echo "Acquire::http { Proxy \"$APT_PROXY\"; };" > /etc/apt/apt.conf.d/01proxy; fi
RUN apt update && \
apt install --no-install-recommends -y curl && \
rm -rf /var/lib/apt/lists/*
まず、2行目のARGでAPT_PROXY
という名前のビルド引数を設定できるようにしています。APT_PROXY
に指定したプロキシがaptの通信に使われることになります。
1つ目のRUNで/etc/apt/apt.conf.d/01proxy
にプロキシの設定を行なっています。ビルド時にAPT_PROXY
が指定された場合にのみ01proxy
を作成するので、APT_PROXY
が未指定であれば、aptはインターネット上のリポジトリを直接取得します。
2つ目のRUNでは例としてcurlをインストールしています。
docker build
だけプロキシを使用して、docker run
するときにはプロキシを使用しない場合
もし、コンテナビルド時だけプロキシを使用して、docker run
するときにはプロキシを使用して欲しくない場合は、apt.conf.dに設定する代わりに、以下のようにhttp_proxy環境変数を設定すればビルド時だけ指定したプロキシを使うことができると思います。
FROM ubuntu:20.04
ARG APT_PROXY
RUN export http_proxy="$APT_PROXY"; \
apt update && \
apt install --no-install-recommends -y curl && \
rm -rf /var/lib/apt/lists/*
コンテナのビルド方法
docker
コマンドを使用する場合、以下のようにビルド時に--build-arg
を使用してプロキシを指定してビルドします。
$ docker build --build-arg APT_PROXY=http://proxy:8080/ -t apt-proxy-test .
docker-composeを使用する場合には、以下のようにargsでAPT_PROXYを設定します。
version: "3"
services:
apt-proxy-test:
build:
context: .
args:
- APT_PROXY=http://proxy:8080/
restart: unless-stopped