Это мой второй пост об этой конкретной проблеме. С тех пор я удалил этот вопрос, потому что нашел лучший способ объяснить, что именно я хотел бы сделать.
По сути, я хотел бы передать аргументы командной строки в 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
? Дайте мне знать, если вам нужны какие-либо разъяснения / дополнительная информация.