Потратив слишком много времени на это, и прочитав обильный справочный материал по 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