我是使用docker的新手,目前正试图在frontname.js文件中动态设置后端URL
运行时间
我有一个由前端和后端组成的应用程序。到目前为止,后端URL可以在docker-compose.yml中指定,如下所示:
myFrontend:
build:
context: ./frontend-dockerfile-location
args:
BACKEND_URL: myBackendUrl
在相应的dockerfile中,我创建了一个nginx库,将我所有的静态文件复制到那里,然后设置正确的后端URL。
FROM nginx:latest
#access the arg defined in the yml file
ARG myBackendUrl
#write the backend url into the containers environment
ENV myBackendUrl=${myBackendUrl}
COPY . /usr/share/nginx/html/
#replace the config.js URL placeholder with the environment variable
RUN envsubst < /usr/share/nginx/html/js/config.js > /usr/share/nginx/html/js/config.js.tmp && mv /usr/share/nginx/html/js/config.js.tmp /usr/share/nginx/html/js/config.js
这种设置的问题是,每当我想更改后端URL时,我总是必须重新构建映像。就在那时,我开始寻找可能的解决方案,如何在运行时更改后端URL。这就是我的第一个问题。是否有可能在运行时更改环境变量,或者运行时是指“启动容器时设置环境变量”?
我的第二个问题是关于我遇到的可能解决方案。首先,我想知道是否适合我的问题的解决方案是webpack。由于我的前端将提供给客户端并在其浏览器上运行,因此我不能简单地定义env变量并通过process.env访问它们;我还没有一个可行的解决方案,但我相信这可能是我问题的答案。我认为另一种可行的选择是入口点指令。我读到这允许定义starup命令,并想知道是否可以将我当前在dockerfile中使用的shell脚本语法放入shell脚本中,并将其作为我的图像的入口点。如果我理解正确,它在启动容器时总是会运行我的脚本,从而允许我更改URL而无需重建图像。
如果有人能帮助我解决这些问题,我将不胜感激,因为即使在多次阅读这些概念后,我也很难理解其中的一些概念。