Dockerfile ENV 使用指南

docs.docker.com

當(dāng)使用 Dockerfile 進(jìn)行構(gòu)建鏡像時(shí),有時(shí)會(huì)需要設(shè)置容器內(nèi)的環(huán)境變量。

ENV 指令的格式如下:

ENV <key>=<value> ...

ENV 指令將環(huán)境變量 <key> 設(shè)置為值 <value>。這個(gè)值將在構(gòu)建階段的所有后續(xù)指令的環(huán)境中,
也可以被替換使用在其他指令中。
該值將被解釋為其他環(huán)境變量,因此如果引號(hào)字符沒有轉(zhuǎn)義,它們將被刪除。像命令行解析一樣,引號(hào)和反斜杠可以用于在值中包含空格。

例如:

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

ENV 指令允許多個(gè) <key>=<value> ... 變量同時(shí)設(shè)置,下面的例子將在生成的鏡像中產(chǎn)生相同的結(jié)果:

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

當(dāng)使用生成的鏡像運(yùn)行容器時(shí),使用 ENV 設(shè)置的環(huán)境變量將持久存在于容器內(nèi)。
你可以使用 docker inspect 查看這些值,并使用 docker run --env <key>=<value> 修改它們。

環(huán)境變量持久性可能會(huì)導(dǎo)致意想不到的副作用。
例如,設(shè)置 ENV DEBIAN_FRONTEND=noninteractive 會(huì)改變 apt-get 的行為,并可能讓使用鏡像的用戶感到困惑。

如果只在構(gòu)建過程中需要環(huán)境變量,而不是在最終鏡像中,請(qǐng)考慮為單個(gè)命令設(shè)置一個(gè)值:

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

或者使用 ARG,它不會(huì)在最終鏡像中持久存在:

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

替代語法

ENV 指令還允許另一種語法 ENV <key> <value>,省略了中間的等號(hào)。例如:

ENV MY_VAR my-value

這種語法不允許在一條 ENV 指令中設(shè)置多個(gè)環(huán)境變量,可能會(huì)造成混淆。例如,下面的代碼設(shè)置了一個(gè)值為“TWO= THREE=world”的環(huán)境變量(ONE):

ENV ONE TWO= THREE=world

支持這種替代語法為了向后兼容,但由于上述原因不鼓勵(lì)使用,可能會(huì)在將來的版本中刪除。

原文鏈接:https://goworker.cn/posts/dockerfile-env/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容