在Docker中配置和管理環(huán)境變量的詳細指南
一、在 Dockerfile 中設(shè)置環(huán)境變量
使用 ENV
指令設(shè)置環(huán)境變量:
FROM alpine ENV TZ=Asia/Shanghai ENV LANG=C.UTF-8 ENV APP_ENV=production
這些變量在容器構(gòu)建時和運行時都可用。
二、在 docker run 時傳入環(huán)境變量
1. 使用 -e 傳遞單個變量:
docker run -e APP_ENV=dev -e TZ=Asia/Shanghai my-image
2. 使用 --env-file 加載多個變量:
創(chuàng)建 .env
文件(每行一個):
APP_ENV=dev TZ=Asia/Shanghai DB_HOST=127.0.0.1 DB_USER=root
然后運行容器時加載:
docker run --env-file .env my-image
三、在 docker-compose.yml 中配置環(huán)境變量
方法 1:直接在 environment: 中配置
services: app: image: my-app environment: - APP_ENV=dev - DB_HOST=localhost
方法 2:引用 .env 文件(自動讀取)
.env
文件內(nèi)容:
APP_ENV=production DB_HOST=db.local
Compose 文件中直接使用 ${VAR}
:
services: app: image: my-app environment: - APP_ENV=${APP_ENV} - DB_HOST=${DB_HOST}
注意: Compose 默認會自動讀取同目錄下的 .env 文件(無需額外指定)。
四、容器內(nèi)部如何讀取環(huán)境變量?
進入容器后使用:
docker exec -it my-container sh # 查看環(huán)境變量 env # 讀取單個變量 echo $APP_ENV
五、注意事項與最佳實踐
問題 | 建議 |
---|---|
敏感信息(如密碼) | 避免寫在 Dockerfile,建議運行時注入或用 Secret 管理 |
多環(huán)境配置 | 使用 .env.dev, .env.prod 區(qū)分不同環(huán)境 |
配置優(yōu)先級 | docker run -e > ENV in Dockerfile |
修改變量重啟容器 | 變量更改后必須重啟容器才生效 |
六、查看和調(diào)試容器中的環(huán)境變量
查看運行中容器的環(huán)境變量:
docker inspect <容器名> | grep -A 10 "Env"
示例輸出:
"Env": [ "APP_ENV=dev", "TZ=Asia/Shanghai" ]
七、環(huán)境變量注入 Java 程序(示例)
在 Spring Boot 項目中配置:
@Value("${APP_ENV}") private String appEnv;
啟動參數(shù)中注入:
docker run -e APP_ENV=dev my-spring-app
總結(jié)
場景 | 用法 |
---|---|
Dockerfile 中寫死變量 | ENV KEY=value |
啟動時傳變量 | -e KEY=value or --env-file |
Compose 配置變量 | environment: + .env 文件 |
動態(tài)配置/安全注入 | 推薦外部傳入,不寫死在鏡像中 |
如果你需要:
- 在 Docker 容器中讀取數(shù)據(jù)庫配置、環(huán)境標識等,
- 使用
.env
文件多環(huán)境切換, - 或你想讓 Java 程序讀取環(huán)境變量作為配置
到此這篇關(guān)于在Docker中配置和管理環(huán)境變量的詳細指南的文章就介紹到這了,更多相關(guān)Docker配置和管理環(huán)境變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Docker創(chuàng)建支持ssh服務(wù)的容器和鏡像
本篇文章主要介紹了詳解Docker創(chuàng)建支持ssh服務(wù)的容器和鏡像,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Docker實現(xiàn)同Ip網(wǎng)段聯(lián)通的實現(xiàn)
這篇文章主要介紹了Docker實現(xiàn)同Ip網(wǎng)段聯(lián)通的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12關(guān)于docker?compose安裝redis集群的問題(集群擴容、集群收縮)
這篇文章主要介紹了docker?compose安裝redis集群、集群擴容、集群收縮,主要包括redis配置信息模板,編寫批量生成配置文件腳本的相關(guān)命令,需要的朋友參考下吧2022-03-03深入了解docker(docker鏡像、容器、倉庫的基本概念)
本文重點給大家介紹docker鏡像、容器、倉庫的基本概念,感興趣的朋友跟著小編一起學(xué)習(xí)吧2016-10-10