Create React App Build и Docker-Compose не передают переменные env - PullRequest
0 голосов
/ 11 декабря 2018

Я сейчас пытаюсь сделать многошаговую сборку приложения CRA.Мой dockerfile выглядит так:

FROM node:10-alpine

WORKDIR /usr/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM nginx:1.15

COPY --from=0 /usr/app/nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=0 /usr/app/build /usr/share/nginx/html

EXPOSE 6000

Мой файл для создания докеров раздела реакции выглядит примерно так:

  web_front:
    build:
      context: Web Front-CRA
    ports:
      - "${WEB_FRONT_PORT}:6000"
    env_file:
      - .env
    volumes:
      - /usr/app/node_modules
      - ./Web Front-CRA:/usr/app

Когда я пытаюсь запустить его с помощью docker-compose up --build Я не могу прочитать NODE_PATH=./src/ файл окружения (все переменные окружения фактически находятся на этапе RUN npm run build.

Однако, если я просто изменяю dockerfile, как показано ниже, чтобы запустить среду разработки, он работает отлично - все env-файлы передаются

FROM node:10-alpine

# work directory
WORKDIR /usr/app

# Copy dependencies first for effective caching
COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 6000

CMD ["npm", "run", "start"]

В настоящее время я использую ubuntu 18 и docker-compose v1.23.2 и Docker 18.09.0. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Чтобы переменные среды передавались в файл docker из этапа сборки docker compose, вы должны использовать args: на этапе сборки docker-compose .Пример ниже

web_front:
    build:
      context: Web Front-CRA
      args:
         NODE_PATH=./src/
    ports:
      - "${WEB_FRONT_PORT}:6000"
    env_file:
      - .env
    volumes:
      - /usr/app/node_modules
      - ./Web Front-CRA:/usr/app

соответствующий файл Docker

FROM node:10-alpine
ARG NODE_PATH
WORKDIR /usr/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM nginx:1.15

COPY --from=0 /usr/app/nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=0 /usr/app/build /usr/share/nginx/html

EXPOSE 6000

Доступ к нему в файле Docker с помощью $NODE_PATH.PS Я использую переменную среды здесь, а не envfile.Но я надеюсь, что вы поняли.Приветствия.

0 голосов
/ 11 декабря 2018

Файл .env - это специальный, зарезервированный по имени файл для docker-compose, чтобы установить значения по умолчанию для переменных среды, поэтому, если вы хотите его использовать, вам лучше не указывать в своем файле compose или использовать другое имя файла(например: myservice.env) для вашего env_file раздела.

  web_front:
    env_file:
      - webfront.env
...

В документации докера это неопределенно упоминается в разделе https://docs.docker.com/compose/env-file/ в файле Compose и переменных CLI / Примечания раздел

Переменные среды, определенные в файле .env, не отображаются автоматически внутри контейнеров.

Чтобы установить переменные среды, применимые к контейнеру, выполните следующие действия.рекомендации в разделе Переменные среды в Compose, в которых описано, как передавать переменные среды оболочки в контейнеры, определять переменные среды в файлах Compose и многое другое по адресу:

...