花了太长时间,并且在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
答案 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'