Недавно я начал работать над 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 не принимаются из углового приложения, если они передаются после сборки.
Есть идеи? Спасибо.