ENV
定義環境變量
ENV <key>=<value> ... # 但只能設置一個環境變量 ENV MY_VAR my-value
使用環境變量
通過 ENV 指令可以聲明環境變量,可以在以下指令中使用環境變量
- ADD
- COPY
- ENV
- EXPOSE
- FROM
- LABEL
- STOPSIGNAL
- USER
- VOLUME
- WORKDIR
- ONBUILD
使用環境變量的方式
有兩種
- $variable_name
- ${variable_name}
${variable_name} 語法還支持以下指定的一些標准 bash 修飾符
- ${variable:-word}:表示如果設置了 variable,那么結果就是那個值;如果未設置變量,則結果將是 word
- ${variable:+word}:表示如果設置了 variable,則結果為 word,否則為空字符串
- 在所有情況下, word 可以是任何字符串,包括額外的環境變量
簡單栗子
FROM busybox
ENV FOO=/bar
WORKDIR ${FOO} # WORKDIR /bar
ADD . $FOO # ADD . /bar
COPY \$FOO /quux # COPY $FOO /quux
覆蓋環境變量的栗子
ENV abc=hello
ENV abc=bye def=$abc
ENV ghi=$abc
def 的值是 hello,ghi 的值是 bye
注意
- 當容器從生成的鏡像運行時,使用 ENV 設置的環境變量將持續存在
- 可以使用 docker inspect 查看值,並使用 docker run --env <key>=<value> 更改它們
實際栗子
dockerfile
FROM nginx EXPOSE 80 ENV test=test1234
構建鏡像,啟動容器,inspect 查看
docker build -f test.dockerfile -t test2 .
docker run -it -d -P test2
docker inspect 120b
通過 ENV 設置的環境變量是會保留到容器中的