在ember build
之后寻找管理配置的最佳做法(如果可能的话)。虽然它不一定特定于Docker,但即使您不是Docker资深人士,下面的内容也必须让您对该要求有所了解。
动机:我们使用Docker + Docker Hub来(自动)分别构建和部署我们的后端和前端应用程序。有多个部署。前端应用程序基于Ember(使用 ember-cli )。而不是在单独的Dockerfile中运行ember build --environment deployment-{1..N}
并最终拥有多个Docker镜像,我宁愿使用一个Docker镜像并运行Docker容器,并将所需的设置作为环境变量传递,以便稍后将它们注入Ember配置,例如为:
docker run -e ENV_APP_APIURL=deployment1.example.com ... --name deployment1 dockerimage
然后我会在Dockerfile中运行一个小脚本ENTRYPOINT
,它会使用这些环境变量并将它们注入到构建的Ember应用程序中,以便Web服务器可以为重新配置的应用程序提供服务。简而言之:
[ember app] >> build >> [compiled generic web app] >> reconfigure(?) >> [final web app]
这是做事的方式还是我应该去喝咖啡?
答案 0 :(得分:2)
如何使用入口点脚本中的环境变量将元标记注入index.html?然后Ember应用程序可以在运行时拾取这些元标记吗?
ENTRYPOINT /start.sh
我的启动脚本执行此操作:
#!/bin/bash
set -e
if [ -n $API_BASE_URI ]
then
sed -i "/API_BASE_URI/c <meta name='API_BASE_URI' content='$API_BASE_URI'>" /app/dist/index.html; > /dev/null
fi ]
exec "$@"
的index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>APP NAME</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="API_BASE_URI" content="/api">
...