前言
Docker是什麼東西以及爲什麼使用docker我就不贅述了,最近遇到一個項目,需求是這樣的:前後端服務均佈署在docker中,但是由於每次啓動後端服務時它的IP及端口號是動態變化的,所以前端每次都需要在後端服務啓動後手動配置後臺服務地址,那麼有沒有自動配置的方法呢,這就是這篇文章所要解答的問題。
問題
比如,我有一個前端項目,它的配置文件config.js
是這樣的
window.GLOBAL={SERVICE_URL:"http://192.250.23.233:8088"}
佈署在docker以後192.250.23.233和8088會變成其它的,變成什麼再容器啓動前誰也不知道。
那我怎麼在容器啓動後自動替換192.250.23.233和8088呢。
解決方案
在docker啓動時通過-e參數將ip和port寫入環境變量,容器啓動後通過shell主動將ip和port對應的環境變量寫入config.js
示例
//Dockerfile
FROM hub.c.163.com/public/centos:7.2.1511
COPY jdk8.rpm jdk8.rpm
RUN rpm -ivh jdk8.rpm
RUN yum clean all
RUN mkdir /tomcat
COPY ./tomcat /tomcat
COPY ./sdc_start.sh /home/sdc_start.sh
RUN chmod 777 /tomcat/bin/*
CMD bash /home/sdc_start.sh
//sdc_start.sh
#!/bin/bash
# description: sdc_start ....
#啓動服務器
echo "服務啓動中..."
echo window.GLOBAL="{SERVICE_URL:\"http://$IP:$PORT\"}"> /tomcat/webapps/dist/static/conf/config.js
/tomcat/bin/catalina.sh run
然後啓動容器
docker run -d -e IP="192.168.111.112" -e PORT="8999" containerID
config.js
中的內容就會變成
window.GLOBAL={SERVICE_URL:"http://192.168.111.112:8999"}