由於公司所需,開始使用docker去打包專案。一路磕磕絆絆,也算有點收穫。
由於客戶機的ip不能確定,所以我們需要將專案的配置檔案中的IP地址做到可配置化,通過docker的env環境變數可以很優雅的解決這個問題。
通過dockerfile定義環境變數
在dockerfile中,我們可以提前定義環境變數。
ENV HOSTIP = `127.0.0.1`複製程式碼
使用環境變數替換IP
在這一步對於不同型別的專案有所區別,比如:
- Java專案:執行於服務端,可以直接讀取環境變數,我用的是springBoot框架,支援直接在配置檔案中讀取環境變數,所以只需要將配置檔案中的IP修改為
${HOSTIP}
即可。 -
前端專案(前後分離):執行於客戶端瀏覽器,自然無法獲取環境變數,身為前端小白的我,用了比較直接的方法解決這個問題,希望老師們給予更好的建議。
- 將配置檔案中的IP替換為標識欄位,我的請求地址配置檔案:
// config.js export const SERVER_URL = `SERVER_URL`; // `SERVER_URL`為標識欄位,用以替換複製程式碼
- 在dockerfile的啟動入口替換IP地址
// 啟動容器時先替換config.js中的標誌欄位為環境變數 CMD sed -i "s/SERVER_URL/$hostip/g" /path/to/config.js; nginx -g "daemon off;" // 將替換語句寫在這裡保證了容器每次啟動時候會根據環境變數替換配置檔案中的IP地址。複製程式碼
- 將配置檔案中的IP替換為標識欄位,我的請求地址配置檔案:
建立容器時傳入環境變數
我們在啟動docker的時候可以傳入HOSTIP:
docker run ... -e HOSTIP=`xxx.xxx.xxx.xxx` ...複製程式碼