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