Can we pass ENV variables through cmd line while building a docker image through dockerfile?

I am working on a task that involves building a docker image with centOs as its base using a Dockerfile . One of the steps inside the dockerfile needs http_proxy and https_proxy ENV variables to be set in order to work behind the proxy.

As this Dockerfile will be used by multiple teams having different proxies, I want to avoid having to edit the Dockerfile for each team. Instead I am looking for a solution which allows me to pass ENV variables at build time, e.g.,

  • How to create a web based console that interacts with the command line
  • Docker Container for Windows - desktop app
  • Cannot connect to MySQL Docker container from another machine on Mac OS X
  • Is it possible to use a private git(hub) repo in Dockerfile ADD?
  • Docker: Why is /etc/resolv.conf unreadable? Breaks DNS [closed]
  • Dockerfile with tomcat + mysql + filesystem app
  • sudo docker build -e http_proxy=somevalue .

    I’m not sure if there is already an option that provides this. Am I missing something?

  • docker: java based application resource duplication
  • distribute docker containers evenly with kubectl
  • RedHat4/Docker on Centos 7. Can't reach internet from Docker Instance
  • Kubernetes NFS volume mount fail with exit status 32
  • Is it possible running docker on big endian, arm32, linux=2.6.34?
  • How to access host port from docker container
  • 2 Solutions collect form web for “Can we pass ENV variables through cmd line while building a docker image through dockerfile?”

    Containers can be built using build arguments (in Docker 1.9+) which work like environment variables.

    Here is the method:

    FROM php:7.0-fpm
    ARG APP_ENV=local
    RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini

    and then build a production container:

    docker build --build-arg APP_ENV=prod .

    For your particular problem:

    FROM debian
    ENV http_proxy ${http_proxy}

    and then run:

    docker build --build-arg http_proxy= .

    Note that if you build your containers with docker-compose, you can specify these build-args in the docker-compose.yml file, but not on the command-line. However, you can use variable substitution in the docker-compose.yml file, which uses environment variables.

    I faced the same situation.

    According to Sin30’s answer pretty solution is using shell,

    CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]
    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.