Use "ENV" Instruction on Windows Image


How to use "ENV" Instruction in Dockerfile for Windows images?



In a Linux environment, the "ENV" instruction does two things in the image build process:

  • Providing a local variable for subsequent instructions as $var or ${var}.
  • Inserting an environment variable to the Linux image.

However, the "ENV" instruction seems not able to provide local variables. But it does inserting an environment variable to the Windows image.

1. Enter the following Dockerfile, JavaImage, to try the "ENV" instruction:

C:\fyicenter> type JavaImage

FROM openjdk
RUN ["PowerShell", "Get-ChildItem", "Env:CLASSPATH"]

# RUN ["PowerShell", "mkdir", $CLASSPATH]
RUN ["PowerShell", "mkdir", "\"C:\\FYI Center\""]

COPY ["", "C:/FYI Center/"]
RUN ["javac", "C:\\FYI Center\\"]
ENTRYPOINT ["java", "Hello"]

2. Build the image and run it:

C:\fyicenter> docker build --file JavaImage --tag myjava .
Sending build context to Docker daemon  12.87MB
Step 1/7 : FROM openjdk
Step 2/7 : ENV CLASSPATH="C:\\FYI Center"
Step 3/7 : RUN ["PowerShell", "Get-ChildItem", "Env:CLASSPATH"]
Name                           Value
----                           -----
CLASSPATH                      C:\FYI Center
Step 4/7 : RUN ["PowerShell", "mkdir", "\"C:\\FYI Center\""]
Mode                           Length Name
----                           ------ ----
d-----                                FYI Center
Step 5/7 : COPY ["", "C:/FYI Center/"]
Step 6/7 : RUN ["javac", "C:\\FYI Center\\"]
Step 7/7 : ENTRYPOINT ["java", "Hello"]
Successfully built 110a378f5d8a
Successfully tagged myjava:latest

C:\fyicenter> docker run --name myjava myjava
Hello world!

C:\fyicenter> docker rm myjava

C:\fyicenter> docker image rm myjava

Ok, we are able to use "ENV" instruction to insert an environment variable to the Windows image.


Docker Container Platform - Tutorials

"shell" Format vs. "exec" Format

Building Docker Images for Windows

⇑⇑ Docker Container Platform - Tutorials

2021-11-30, 433👍, 0💬