Dockerfile ENV 使用指南

當使用 Dockerfile 進行構建鏡像時,有時會須要設置容器內的環境變量。docker

ENV 指令的格式以下:post

ENV <key>=<value> ...

ENV 指令將環境變量 <key> 設置爲值 <value>。這個值將在構建階段的全部後續指令的環境中,
也能夠被替換使用在其餘指令中。
該值將被解釋爲其餘環境變量,所以若是引號字符沒有轉義,它們將被刪除。像命令行解析同樣,引號和反斜槓能夠用於在值中包含空格。ui

例如:命令行

ENV MY_NAME="John Doe"
ENV MY_DOG=Rex\ The\ Dog
ENV MY_CAT=fluffy

ENV 指令容許多個 <key>=<value> ... 變量同時設置,下面的例子將在生成的鏡像中產生相同的結果:code

ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \
    MY_CAT=fluffy

當使用生成的鏡像運行容器時,使用 ENV 設置的環境變量將持久存在於容器內。
你可使用 docker inspect 查看這些值,並使用 docker run --env <key>=<value> 修改它們。get

環境變量持久性可能會致使意想不到的反作用。
例如,設置 ENV DEBIAN_FRONTEND=noninteractive 會改變 apt-get 的行爲,並可能讓使用鏡像的用戶感到困惑。dockerfile

若是隻在構建過程當中須要環境變量,而不是在最終鏡像中,請考慮爲單個命令設置一個值:class

RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y ...

或者使用 ARG,它不會在最終鏡像中持久存在:容器

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y ...

替代語法變量

ENV 指令還容許另外一種語法 ENV <key> <value>,省略了中間的等號。例如:

ENV MY_VAR my-value

這種語法不容許在一條 ENV 指令中設置多個環境變量,可能會形成混淆。例如,下面的代碼設置了一個值爲「TWO= THREE=world」的環境變量(ONE):

ENV ONE TWO= THREE=world

支持這種替代語法爲了向後兼容,但因爲上述緣由不鼓勵使用,可能會在未來的版本中刪除。

原文連接:https://k8scat.com/posts/dockerfile-env/

相關文章
相關標籤/搜索