LoginSignup
0
3

More than 3 years have passed since last update.

docker build時にaptの通信で使用するプロキシサーバを指定できるようにする

Last updated at Posted at 2020-12-20

コンテナをビルドする際、aptのみプロキシサーバを経由させたかったため、aptの通信のみプロキシを通す方法を調べました。

Dockerfileに記載する内容

--build-argに指定した内容を元に、apt用のプロキシサーバの設定を行うようなDockerfileを作成します。

docker runしたときにもdocker buildしたときと同じプロキシサーバを使う場合

自分の場合、docker runでコンテナを実行する際にもそのプロキシを使用して欲しいため、/etc/apt/apt.conf.d/にプロキシの設定を行なっています。

Dockerfile
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環境変数を設定すればビルド時だけ指定したプロキシを使うことができると思います。

Dockerfile
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を設定します。

docker-compose.yml
version: "3"
services:
  apt-proxy-test:
    build:
      context: .
      args:
        - APT_PROXY=http://proxy:8080/
    restart: unless-stopped

参考ページ

0
3
0

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
0
3