LoginSignup
1
1

More than 1 year has passed since last update.

proxy環境下でのdocker build

Posted at

TL; DR

dockerfileに書いてしまうと、そのレイヤが保持されてコンテナが作られる。
すると何が起きるかというと、containerをbuildした後にunsetできなくなる。
その回避策。

問題の詳細

以下が、実際に問題となってしまうdockerfileの例です。

# FROM OSの名前:バージョン
FROM centos:7

####### 問題となる部分:ここから
ENV HTTP_PROXY http://user:pass@host:port
ENV HTTPS_PROXY http://user:pass@host:port
ENV FTP_PROXY http://user:pass@host:port
####### 問題となる部分:ここまで

RUN echo "now building..."
RUN yum update -y && yum upgrade && yum -y install httpd
RUN sed -i '/#ServerName/a ServerName www.example.com:80' /etc/httpd/conf/httpd.conf

ADD ./index.html /var/www/html/

EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

こういうdockerfileを書いてしまうと、環境変数HTTP_PROXYに、http://user:pass@host:port がセットされます。
そして、ご存知のようにbuildの過程で1つのレイヤとしてfixしてしまいます。
つまり、環境変数HTTP_PROXYは、あとから変更不可となります

例えば、社内でContainerをbuildしてそれを配布したい場合、自分のproxyの認証情報を埋め込んだまま配布してしまいます。
これは問題ですよね。。。。。

回避策

buildする際に、build-arg引数として、proxyの情報を与えてあげましょう。

docker-compose build ^
  --build-arg HTTP_PROXY=http://%LDAP%:%PASS%@host:port ^
  --build-arg HTTPS_PROXY=http://%LDAP%:%PASS%@host:port ^
  --build-arg http_proxy=http://%LDAP%:%PASS%@host:port ^
  --build-arg https_proxy=http://%LDAP%:%PASS%@host:port ^
  service名

もちろん、この時のdockerfileには、上記のダメサンプルの「問題となる部分」は記載はしません。

1
1
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
1
1