Docker -компонентная переменная среды передачи в docker контейнер и в npm start - PullRequest
0 голосов
/ 24 апреля 2020

Потратив слишком много времени на это, и прочитав обильный справочный материал по docker и многим многим статьям о переполнении стека, я должен признать поражение и обратиться за помощью к группе

Чего я хочу добиться, так это мой NODE_ENV определен где-то за пределами docker файлов, так что он может быть .gitignored.

Так что я хочу иметь возможность иметь файл .env в том же каталоге верхнего уровня вместе с docker -compose .yml и Dockerfile, который содержит запись для NODE_ENV.

Звучит довольно прямо?

Во-первых, у меня были проблемы с оператором CMD в файле dockerfile. Исследовав его, я обнаружил, что мне нужно сделать что-то вроде этого

FROM node:latest

ENV NODE_ENV=development

WORKDIR /usr/src/app

COPY ./package*.json /usr/src/app/

RUN npm install

ADD . .

CMD ["sh", "-c", "npm run start:${NODE_ENV}"]

EXPOSE 3001

Это работает как чудо, затем я запускаю его из командной строки с помощью

docker run -e " NODE_ENV = разработка ".

Однако, добавьте docker -композицию в уравнение, и все пойдет не так. И это также не дает большого количества ошибок.

version: '3'
services:
  app:
    build: .
    environment: 
      - NODE_ENV=$NODE_ENV 
    ports:
      - '80:3001'
    links:
      - mongodb
  mongodb:
    image: mongo
    ports:
      - '27017:27017'

Теперь, если я запустил это с помощью docker -compose config, я вижу, что переменная окружения корректно установлена ​​

services:
  app:
    build:
      context: /home/me/myproject
    environment:
      NODE_ENV: development
    links:
    - mongodb
    ports:
    - 80:3001/tcp
  mongodb:
    image: mongo
    ports:
    - 27017:27017/tcp
version: '3.0'

Итак, мой вопрос в принципе, кто-нибудь может определить, что я делаю неправильно? Или это ошибка в docker, о которой я должен сообщить?

Единственные подсказки, данные из журналов,

app_1 exited with code 2

и в журнале контейнеров

/bin/sh: 1: [: npm run ,: unexpected operator

1 Ответ

0 голосов
/ 27 апреля 2020

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

version: '3'
services:
  app:
    build: .
    environment: 
      - "NODE_ENV=$NODE_ENV" 
    ports:
      - '80:3001'
    links:
      - mongodb
  mongodb:
    image: mongo
    ports:
      - '27017:27017'
...