【问题标题】:Environment variables not loading inside docker container环境变量未加载到 docker 容器中
【发布时间】: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


【解决方案1】:

在 docker-compose.yml 中,环境变量应该在 api 服务中声明,而不是在 mongo 服务中声明,例如 MONGO_INITDB_DATABASE=${DATABASE}

使用这个,env_file是一个替代品,read more

version: '3.8'
services:
  api:
    build: .
    image: api
    working_dir: /usr/src/app
    expose:
      - 4000
    ports:
      - '4000:4000'
    env_file:
      - ./secret.env
    environment:
      - DB_URL_LOCAL=${DB_URL_LOCAL}
      - JWT_SECRET=${JWT_SECRET}
    depends_on:
      - mongo

  mongo:
    container_name: mongo
    image: mongo
    volumes:
      - './data:/data/db'
    ports:
      - 27017:27017
    restart: always

【讨论】:

  • 感谢您也展示了这种方式,两种方法都有效。
猜你喜欢
  • 2020-01-28
  • 2019-06-26
  • 2021-04-06
  • 2020-02-23
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多