Docker-compose将环境变量传递给docker容器,并进入npm启动。

问题描述 投票:0回答:1

在这个问题上花了太长时间,也看了大量关于docker的参考资料和很多很多堆栈溢出的文章,我不得不认输,向小组求助

我想实现的是让我的NODE_ENV定义在docker文件之外的某个地方,这样它就可以被.gitignored。

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

听起来很直接?

首先我在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配置运行这个,我可以看到环境变量被正确设置了。

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的一个bug,我应该报告?

从日志中给出的唯一线索就是

app_1 exited with code 2

并在容器日志中

/bin/sh: 1: [: npm run ,: unexpected operator
docker docker-compose environment-variables npm-scripts
1个回答
0
投票

我通过把docker-compose中的环境变量行用双引号来实现。

version: '3'
services:
  app:
    build: .
    environment: 
      - "NODE_ENV=$NODE_ENV" 
    ports:
      - '80:3001'
    links:
      - mongodb
  mongodb:
    image: mongo
    ports:
      - '27017:27017'
© www.soinside.com 2019 - 2024. All rights reserved.