【发布时间】:2020-11-06 01:20:47
【问题描述】:
我有两个 dockerized 服务。第一个服务是api 服务,它依赖于mongo 服务。但是,由于某些原因,api 服务无法连接到 mongo 服务,因为容器内部的环境变量没有很好地传递。我的 .env 中有两个变量,即
JWT_SECRET=somesecret
DB_URL_LOCAL=mongodb://mongo:27017/apii
我尝试在docker-compose 文件中设置环境变量,当我运行docker-compose config 时,我看到显示的变量及其值,但我的应用程序无法检测到这些变量。 MongoDB 不断抛出 UnhandledPromiseRejectionWarning: MongoParseError: URI malformed, cannot be parsed 错误。
我也尝试在主Dockerfile 中设置环境变量,但还是不行。请我需要一些帮助。这是我的 Dockerfile 和 docker-compose.yml 文件的副本。
这是 Dockerfile
FROM node:12-alpine AS base
WORKDIR /usr/src/app
FROM base AS build
COPY package*.json .babelrc ./
RUN npm install
COPY ./src ./src
RUN npm run build
RUN npm prune --production
FROM base AS release
COPY --from=build /usr/src/app/node_modules ./node_modules
COPY --from=build /usr/src/app/dist ./dist
USER node
EXPOSE 4000
CMD [ "node", "./dist/server/server.js" ]
这是 docker-compose.yml 文件
version: '3.8'
services:
api:
build: .
image: api
working_dir: /usr/src/app
expose:
- 4000
ports:
- '4000:4000'
depends_on:
- mongo
mongo:
container_name: mongo
env_file:
- .env
environment:
- DB_URL_LOCAL=$DB_URL_LOCAL
- JWT_SECRET=$JWT_SECRET
image: mongo
volumes:
- './data:/data/db'
ports:
- 27017:27017
restart: always
谢谢。
【问题讨论】:
-
在 docker-compose.yml 中,环境变量应该在 api 服务中声明,而不是在 mongo 服务中声明类似
MONGO_INITDB_DATABASE=${DATABASE}
标签: node.js mongodb docker docker-compose devops