【发布时间】: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