Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从docker向Angular应用程序获取环境值_Angular_Docker - Fatal编程技术网

无法从docker向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

我无法获取通过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 --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
提取到environment
environment.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命令中传递一些环境变量,并在angular
environment.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.
。如果它解决了你的问题,我很乐意把它作为一个答案贴出来