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には、上記のダメサンプルの「問題となる部分」は記載はしません。