node.js - 无法使用Docker中设置的环境系统变量从 Node 连接到MongoDB服务器

标签 node.js mongodb docker docker-compose dockerfile

我正在尝试使用 Node 和 mongodb 镜像构建 Docker 镜像,但无法从 Dockerfile 或 docker-composer 设置环境变量。

Dockerfile:

FROM node

RUN mkdir /app WORKDIR /app COPY package.json /app

RUN npm install COPY . /app

ENV MONGODB_URI 192.168.99.100/myapp

EXPOSE 3030

CMD ["npm", "start"]

docker-compose.yml:

version: "2"

services:

web:

build: .

volumes:

  - ./:/app

ports:

  - "3030:3030"

environment:

  - MONGODB_URI="192.168.99.100/myapp"

links:

  - "mongo"

mongo:

image: "mongo"

ports:

  - "27017:27017"

volumes_from:

  - mongodata

mongodata:

image: tianon/true

volumes:

  - /data/db

我正在尝试从配置对象内部获取 MONGODB_URI。 console.log 返回预期结果,但我仍然收到错误。

class Config {

constructor() {
    this.port = process.env.PORT || 3030;
    console.log(process.env.MONGODB_URI);
    this.databaseUrl = process.env.MONGODB_URI || 'localhost/myapp';
}

我得到的错误是:

Error: no hostname or hostnames provided in connection string web_1 | at module.exports (/app/node_modules/mongodb/lib/url_parser.js:24:11)

如果我尝试直接使用 URL,而不依赖环境变量,它会正常工作并且我会获得连接。

最佳答案

嗯,显然我刚刚得到了橡皮鸭式的答案。

问题出在“- MONGODB_URI="192.168.99.100/myapp””。 该值不应包含在引号中。

我将其设置为“MONGODB_URI=192.168.99.100/myapp”并且工作正常。

关于node.js - 无法使用Docker中设置的环境系统变量从 Node 连接到MongoDB服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875964/

相关文章:

node.js - 如何更改 Docker 容器内的代码?

javascript - $resource的angularjs无限请求循环

node.js - MongoDB - 如何将值搜索到嵌套数组中?

docker - 调用iptables在docker中导致 “operation not supported”

javascript - TypeScript 和运行时类型检查,2020 年的简单解决方案

javascript - 如何将 React + NodeJS Express 应用程序部署到 AWS?

node.js - MongoDB NodeJS native 驱动程序(mongodb) 与 Mongo Shell 性能对比

php - MongoDB:如何查询嵌套数组?

Selenium 测试在本地有效,但在 Gitlab CI 中无效

visual-studio - Visual Studio 正在删除我在 docker.compose.vs.debug.g.yml 中添加的环境变量