【问题标题】:Docker-compose pass environment variable to docker container and into npm startDocker-compose 将环境变量传递给 docker 容器并进入 npm start
【发布时间】:2020-04-24 13:17:02
【问题描述】:

在这方面花了太长时间,阅读了大量关于 docker 的参考资料和许多堆栈溢出文章,我不得不认输并向小组寻求帮助

我想要实现的是在 docker 文件之外的某个地方定义我的 NODE_ENV,以便它可以被 .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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 2017-09-18
      • 2020-11-07
      • 2015-09-18
      • 2022-01-16
      • 2021-06-07
      • 2021-11-27
      • 2018-08-23
      相关资源
      最近更新 更多