天天看點

VUE通過Docker傳入參數替換環境變量

1. web項目請求後端必須在前端代碼内部寫死後端的IP位址與端口(比如.env檔案)

2. 通過docker啟動傳入參數:

更改前端封裝http請求:

/**
 * docker 運作指令傳入請求後端的IP位址
 * 打包指令:sudo docker build --no-cache --memory-swap -1 . -t 鏡像名稱
 * 啟動指令:sudo docker run -p 4000:80 -e VUE_APP_API_BASE_URL=http://192.168.0.1:8001/   -d -t 鏡像名稱
 */
const baseUrl = () => {
  const { promiseBaseUrl } = document.querySelector('html').dataset
  if (promiseBaseUrl.indexOf('http') === 0) {
    return `${promiseBaseUrl}`
  }
  return process.env.VUE_APP_API_BASE_URL
}

// 建立axios執行個體,在這裡可以設定請求的預設配置
const service = axios.create({
  timeout: 6000, // 設定逾時時間6s
  baseURL: baseUrl()
})      

環境變量檔案:

NODE_ENV=production
VUE_APP_PREVIEW=true
VUE_APP_API_BASE_URL= http://192.168.160.248:10700/api      

docker 打包指令:

docker run -p 2021:80 -e VUE_APP_API_BASE_URL=http://後端IP:後端端口/api -d -t web

dockerfile:

#該鏡像是基于nginx:latest鏡像建構的
FROM nginx

#作者名
MAINTAINER lingdu

#删除目錄下的default.conf檔案
#RUN rm /etc/nginx/conf.d/default.conf

#将default.conf複制到/etc/nginx/conf.d/下,用本地的default.conf配置來替換nginx鏡像裡的預設配置
#ADD default.conf /etc/nginx/conf.d/

#将項目根目錄下dist檔案夾複制到鏡像/usr/share/nginx/html/目錄下 
COPY ./dist/ /usr/share/nginx/html/

#指定容器的工作目錄
WORKDIR /etc/nginx

#指定于外界互動的端口,即容器在運作時監聽的端口
EXPOSE 80

#設定程式的入口程式,運作容器時執行的shell指令,差別在于ENTRYPOINT後面攜帶的參數不會被docker run 提供的參數覆寫,而CMD會被覆寫
#ENTRYPOINT [ "/usr/sbin/nginx", "-g", "daemon off;" ]

# sed [-nefr] [動作]
# 選項與參數:
# -n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的資料一般都會被列出到終端上。但如果加上 -n 參數後,則隻有經過sed 特殊處理的那一行(或者動作)才會被列出來。
# -e :直接在指令列模式上進行 sed 的動作編輯;
# -f :直接将 sed 的動作寫在一個檔案内, -f filename 則可以運作 filename 内的 sed 動作;
# -r :sed 的動作支援的是延伸型正規表示法的文法。(預設是基礎正規表示法文法)
# -i :直接修改讀取的檔案内容,而不是輸出到終端。
# sed -i 's/原字元串/新字元串/' /home/1.txt
# sed -i 's/原字元串/新字元串/g' /home/1.txt

CMD ["/bin/bash", "-c", "sed -i \"s@<html@<html data-promise-base-url=\"$VUE_APP_API_BASE_URL\"@\" /usr/share/nginx/html/index.html; nginx -g \"daemon off;\""]      

彪悍的人生不需要解釋,彪悍的代碼不需要注釋。