Передача переменных среды во время выполнения в приложение Vue. js с docker -compose - PullRequest
2 голосов
/ 13 января 2020

Это мой второй пост об этой конкретной проблеме. С тех пор я удалил этот вопрос, потому что нашел лучший способ объяснить, что именно я хотел бы сделать.

По сути, я хотел бы передать аргументы командной строки в docker-compose up и установить их в качестве переменных окружения в моем Vue. js веб-приложении. Цель состоит в том, чтобы иметь возможность каждый раз изменять переменные среды, не перестраивая контейнер.

С этим я сталкиваюсь с несколькими проблемами. Вот мои docker файлы:

Dockerfile для Vue. js приложения.

FROM node:latest as build-stage
WORKDIR /app

# Environment variable.
ENV VUE_APP_FOO=FOO

COPY package*.json ./
RUN npm install
COPY ./ .
RUN npm run build

FROM nginx as production-stage
RUN mkdir /app
COPY --from=build-stage /app/dist /app
COPY nginx.conf /etc/nginx/nginx.conf

VUE_APP_FOO хранится и доступен через возражения Node's process.env и, кажется, быть переданным во время сборки.

И мой docker -compose.yml:

version: '3.5'

services:
    ms-sql-server:
        image: mcr.microsoft.com/mssql/server:2017-latest-ubuntu
        ports: 
            - "1430:1433"
    api:
        image: # omitted (pulled from url)
        restart: always
        depends_on: 
            - ms-sql-server
        environment:
            DBServer: "ms-sql-server"
        ports:
            - "50726:80"
    client:
        image: # omitted(pulled from url)
        restart: always
        environment:
            - VUE_APP_BAR="BAR"
        depends_on: 
            - api
        ports:
            - "8080:80"

Когда я sh в клиентский контейнер с docker exec -it <container_name> /bin/bash, переменная VUE_APP_BAR присутствует со значением «БАР». Но переменная не сохраняется в объекте process.env в моем приложении Vue. Кажется, что-то странное происходит с Node, и это переменные среды. Это похоже на игнорирование среды контейнера.

Есть ли у меня какой-либо доступ к переменным уровня контейнера, установленным в docker -compose.yml внутри моего приложения Vue. js? Кроме того, есть ли способ передать эти переменные в качестве аргументов с docker-compose up? Дайте мне знать, если вам нужны какие-либо разъяснения / дополнительная информация.

1 Ответ

1 голос
/ 13 января 2020

Клиентское приложение работает в веб-браузере, но переменные окружения на сервере. Клиенту нужен способ получения значения переменной среды с сервера.

Для этого sh у вас есть несколько вариантов, включая:

  1. Кредитное плечо Nginx для обслуживания самой переменной среды, используя такой подход, как один из них: nginx: использовать переменные среды . Этот подход может быть быстрым, более динамичным c или более статичным c в зависимости от ваших потребностей, может быть менее формальным и элегантным. Или

  2. Реализация серверного API (Node.js?), Который считывает переменную среды и возвращает ее клиенту через вызов AJAX. Этот подход элегантен, динамичен c, API-центри c. Или

  3. И, наконец, если переменная среды равна stati c на nginx экземпляра на развертывание, вы можете создать ресурсы stati c приложения Vue во время развертывания и после установки. - прямо в коде состояния stati c кодируйте переменную среды. Этот подход несколько элегантен, но загрязняет клиентский код деталями сервера и несколько устарел c (может изменяться только при развертывании).

...