Docker-compose将环境变量传递给docker容器并传递给npm start

时间:2020-04-24 13:17:02

标签: docker docker-compose environment-variables npm-scripts

花了太长时间,并且在docker上阅读了丰富的参考资料以及许多堆栈溢出文章,我不得不承认失败并向面板寻求帮助

我想要实现的是将我的NODE_ENV定义在docker文件之外的某个位置,以便可以对其进行.gitignored。

因此,我希望能够在同一个顶级目录中包含一个.env文件,以及包含NODE_ENV条目的docker-compose.yml和Dockerfile。

听起来很直接吗?

首先,我在dockerfile中的CMD语句遇到了问题。经过研究,我发现我需要做类似的事情

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 = development”。

但是,将docker-compose纳入等式中,这一切都会出错。而且它也不会给错误带来太多影响。

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 :(得分:0)

我通过将环境变量行放在docker-compose中的双引号中来使其工作。

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