Передача переменных среды в Docker угловых контейнеров: пост-сборка - PullRequest
0 голосов
/ 20 июня 2019

Недавно я начал работать над Dockerizing моим угловым приложением. После добавления всех необходимых файлов (Dockerfile, docker-compose.yml, entrypoint.sh) мне удалось успешно построить свой образ.

Затем мне нужно было передать переменные окружения в приложение, чтобы передать внутренний URL-адрес API, который я не хотел добавлять ни в сам код, ни в файл Docker.

После некоторых поисков я следил за этой статьей

https://codinglatte.com/posts/angular/using-os-environment-variables-in-angular-with-docker/

Итак, подведем итог

  • я установил @ angular-builders / custom-webpack
  • Я изменил файл angular.json, чтобы теперь использовать новый компоновщик вместо стандартного
  • я создал файл custom-webpack.config.js, который был добавлен в конфигурацию

    const webpack = require('webpack');
    
    module.exports = {
     plugins: [
       new webpack.DefinePlugin({
        $ENV: {
          ENVIRONMENT: JSON.stringify(process.env.ENVIRONMENT),
          SomeAPIKey: JSON.stringify(process.env.SomeAPIKey),
          SomeOtherAPIKey: JSON.stringify(process.env.SomeOtherAPIKey)
        }
       })
      ]
     };
    
  • Я создал и экспортировал интерфейс с объявлениями переменных, которые я хочу импортировать

      import { Env } from 'src/typing';
    
      declare var $ENV: Env;
      export const environment = {
       production: true,
       environment: $ENV.ENVIRONMENT,
       ApiUrl:$ENV.API_URL
    };
    
  • Тогда последний шаг - добавить переменные окружения в Dockerfile, например,

      FROM node:10.15.0 as builder
    
      # SET ENVIRONMENT VARIABLES
      ENV ENVIRONMENT="development"
      ENV API_URL="xxx"
    
      RUN ng build --prod
    

Все отлично работало, даже если я видел это, если

ENV API_URL=x
Команда

была после

RUN ng build --prod

Тогда это значение не было взято.

Итак, моя проблема в том, как мне добавить эту переменную окружения за пределы Dockerfile, которая не должна содержать такого рода детали, а также устранить проблему с помощью порядка команды ENV?

Например, можно ли передать эти переменные во время выполнения. Образы ядра Asp.net, например, могут получать переменные среды в Докер запустить ..

Я попытался и увидел, что эти переменные env не принимаются из углового приложения, если они передаются после сборки.

Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 20 июня 2019

Если API_URL не используется в RUN ng build --prod или других шагах docker build, вам не нужно указывать его в Dockerfile, просто передайте его контейнеру при запуске, как показано ниже:

docker run --env API_URL="xxx" --env VAR2=value2 ubuntu

Вы можете обратиться к официальному руководству , тогда вам не нужно заботиться о заказе ENV в Dockerfile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...