环境变量未加载到Docker容器内部

时间:2020-11-06 01:20:47

标签: node.js mongodb docker docker-compose devops

我有两项服务已码头化。第一项服务是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

谢谢。

1 个答案:

答案 0 :(得分: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