无法从docker向Angular应用程序获取环境值
我无法获取通过docker run命令传递到我的angular应用程序的无法从docker向Angular应用程序获取环境值,angular,docker,Angular,Docker,我无法获取通过docker run命令传递到我的angular应用程序的environment.ts文件的ENV值。我在解释下面的docker文件 Dockerfile FROM node:12-alpine as angular-build #FROM nginx:1.17.1-alpine RUN echo "NODE Version:" && node --ver
environment.ts
文件的ENV
值。我在解释下面的docker文件
Dockerfile
FROM node:12-alpine as angular-build
#FROM nginx:1.17.1-alpine
RUN echo "NODE Version:" && node --version
RUN echo "NPM Version:" && npm --version
COPY ./app /app
WORKDIR /app/mean-stack/angular-js
RUN npm install
#COPY . /app/mean-stack/angular-js
RUN npm run build --prod
COPY install-nginx-alpine.sh /
RUN sh /install-nginx-alpine.sh
EXPOSE 90
# # Expose 443, in case of LTS / HTTPS
EXPOSE 443
ENV STATIC_URL /site
# Absolute path in where the static files wil be
ENV STATIC_PATH /app/static/angular
# If STATIC_INDEX is 1, serve / with /static/index.html directly (or the static URL configured)
# ENV STATIC_INDEX 1
ENV STATIC_INDEX 0
# Add demo app
COPY ./app /app
WORKDIR /app/mean-stack/node-js
RUN echo "$WORKDIR"
RUN pwd
RUN ls -lt
RUN npm install
EXPOSE 8081
# Angular resources
#WORKDIR /app/mean-stack/angular-js
#RUN npm install
#COPY . /app/mean-stack/angular-js
#RUN npm run build --prod
RUN mkdir /app/static/angular
COPY --from=angular-build /app/mean-stack/angular-js/dist/ubot /app/static/angular
# When the container starts, replace the env.js with values from environment variables
CMD ["/bin/sh", "-c", "envsubst < /app/static/angular/assets/env.template.js > /app/static/angular/assets/env.js && exec nginx -g 'daemon off;'"]
这里的8999
是angular的托管端口,90
是集装箱端口。类似地,1901
是同一Dockerfile
中存在的其他应用程序的托管端口(我没有提到我的总Dockerfile代码,只给出了角度部分。
)
这里我需要将节点\u PORT=1901
提取到environmentenvironment.ts
文件。我在下面解释我的角度代码
资产/env.js
(function(window) {
window["env"] = window["env"] || {};
// Environment variables
window["env"]["nodePort"] = 1900;
console.log('env port', window["env"]["nodePort"]);
})(this);
(function(window) {
window.env = window.env || {};
console.log('template', "${NODE_PORT}");
// Environment variables
window["env"]["nodePort"] = "${NODE_PORT}";
})(this);
资产/env.template.js
(function(window) {
window["env"] = window["env"] || {};
// Environment variables
window["env"]["nodePort"] = 1900;
console.log('env port', window["env"]["nodePort"]);
})(this);
(function(window) {
window.env = window.env || {};
console.log('template', "${NODE_PORT}");
// Environment variables
window["env"]["nodePort"] = "${NODE_PORT}";
})(this);
index.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Unified Test Automation</title>
<base href="/site/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="assets/env.js"></script>
<link rel="icon" type="image/x-icon" href="assets/cisco_logo.png">
</head>
<body class="cui" style="overflow:auto">
<app-root></app-root>
</body>
</html>
export const environment = {
production: false,
nodeJsBaseUrl: `http://${window.location.hostname}`,
hostingNodeJsContainerPort: window["env"]["nodePort"] || 1900
};
这里的想法是docker何时运行env.js
值将替换为docker命令行中的环境变量。因此,相应地window[“env”][“nodePort”]=1900
应该是window[“env”][“nodePort”]=1901
,但在我的情况下,docker的env值并没有替换原始值。我需要从docker命令中传递一些环境变量,并在angularenvironment.ts
文件中进行设置。请帮助我解决这个问题。运行sed
并用环境中的值替换${NODE\u PORT}怎么样?@Mogi:我没有理解你。你能详细地给出你的答案吗。在中运行“sed's/${NODE\u PORT}/1901/'assets/env.template.js”
dockerfile@Mogi:此1901
不能是静态值。运行容器时,端口号始终可能会更改。因此,您可以在dockerfile中使用ARG
:然后运行“sed's/${NODE\u port}/$nodeport/'assets/env.template.js”
并在构建映像时使用docker build--build ARG nodeport=1901.
。如果它解决了您的问题,我很乐意将其作为答案发布。运行sed
并用环境中的值替换${NODE\u PORT}怎么样?@Mogi:我没有理解您的意思。你能详细地给出你的答案吗。在中运行“sed's/${NODE\u PORT}/1901/'assets/env.template.js”
dockerfile@Mogi:此1901
不能是静态值。运行容器时,端口号始终可能会更改。因此,您可以在dockerfile中使用ARG
:然后运行“sed's/${NODE\u port}/$nodeport/'assets/env.template.js”
并在构建映像时使用docker build--build ARG nodeport=1901.
。如果它解决了你的问题,我很乐意把它作为一个答案贴出来