当前位置: 首页 > 知识库问答 >
问题:

如何将docker容器连接到mongodb

钱毅
2023-03-14

我无法将作为docker容器运行的应用程序连接到mongoDB。我知道新版本docker compose不推荐使用“链接”,所以我尝试使用自定义网络。我的码头工人。yml:

version: "3.3"

services:

  app:
    container_name: app
    build: ./app
    depends_on:
      - "mongodb"
    networks:
      - my-network
    command: pm2-docker start pm2.config.js --watch
    volumes:
      - ./app/logs:/opt/app/logs
      - ./app:/opt/app
    ports:
      - "3010:80"

  mongodb:
    image: mongo
    container_name: mongodb
    restart: always
    environment:
      MONGO_INITDB_ROOT_PASSWORD: pw
      MONGO_INITDB_ROOT_USERNAME: login
      MONGO_INITDB_DATABASE: dbname
    volumes:
      - ./mongodb/db:/data/db
    ports:
      - "27017:27017"
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

我的应用程序的Dockerfile:

FROM node:10.7.0


RUN npm i -g pm2
RUN pm2 install pm2-logrotate \
    && pm2 set pm2-logrotate:max_size 50M \
    && pm2 set pm2-logrotate:compress true \
    && pm2 set pm2-logrotate:workerInterval 60

RUN mkdir -p /tmp
COPY package*.json /tmp/
RUN cd /tmp \
    && npm i \
    && npm cache clean --force

RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/
WORKDIR /opt/app
COPY . /opt/app/
VOLUME [ "/opt/app/logs/" ]

ENV PORT 80
ENV MONGODB_AUTH mongodb://login:pw@127.0.0.1:27017/dbname
EXPOSE 80

CMD [ "pm2-docker", "start", "pm2.config.js", "--env", "production" ]

当我运行MongoClient.connect(process.env.MONGODB_AUTH,{useNewUrlParser: true});时,我在应用程序中得到以下错误消息

在第一次连接时连接到服务器[127.0.0.1:27017]失败[MongoNetworkError:连接ECONNREFUSED127.0.0.1:27017]

我不明白我做错了什么。这是docker网络ls的控制台输出:

NETWORK ID          NAME                    DRIVER     SCOPE
4731ec3d6886        bridge                  bridge     local
e5a6bf78bd5f        docker_gwbridge         bridge     local
aae21167a37a        host                    host     local
d6ba0dfe01a3        myproject_default       bridge     local
34af02bd434d        myproject_my-network    bridge     local
5911111233bf        none                    null     local

这是docker network inspect myproject\u my-network的输出:

[
    {
        "Name": "myproject_my-network",
        "Id": "34af02bd434d7fe8b6755f584b45eeb0a47fafb087d7f44023598d6ae8bb79a4",
        "Created": "2018-08-05T22:21:06.938675177+03:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "my-network",
            "com.docker.compose.project": "myproject"
        }
    }
]

当我尝试使用172.20.0.1而不是127.0.0.1时,我得到了同样的错误。我很乐意得到任何帮助来解决我的问题

共有1个答案

葛宪
2023-03-14

似乎您正在名为mongob的容器中运行mongob。

MongoDB正在监听容器的端口27017,并且您的容器将其发布在主机的端口27017上。

但在应用程序容器中,没有应用程序正在本地主机的端口27017上侦听。

所以你的错误是正常的,你不应该能够以这种方式连接到mongo。相反,您可以尝试:

ENV MONGODB_AUTHmongodb://login:pw@mongodb:27017/dbname

您仍然需要使用mongodb://login:pw@127.0.0.1:27017/dbname从您的主机发送。

docker comment的留档中有一个例子:

在web容器中,到db的连接字符串如下所示postgres://db:5432,从主机上看,连接字符串类似于postgres://{DOCKER_IP}:8001。从…起https://docs.docker.com/compose/networking/

 类似资料:
  • 问题内容: 我在将作为docker容器运行的nodeJS应用程序连接到mongoDB时遇到问题。让我解释一下到目前为止我做了什么: 如您所见,已经有一个mongo docker容器正在运行。 现在我正在运行我的nodeJS应用程序docker容器(这是来自meteorJS的构建): 在这个Docker容器中,我想通过运行以下命令来运行应用程序: 现在我得到了错误 我已经尝试通过设置以下内容来设置M

  • 我的数据库连接是用下面的类处理的: 这是我的spring boot控制器 下面是我的dockerfile: 我读了这里和这里提到的解决方案。也阅读了一些教程,但我无法将这些解决方案中的任何一个适合我的代码。在我的代码中,我应该在哪里更改?

  • 问题内容: 我正在使用docker- compose 运行一个应用程序。一切正常,通过连接到容器内的Mongo,我可以看到所有数据。但是,当我连接到RoboMongo时,我看不到任何数据。 我该如何解决这个问题? 问题答案: 您应该在Docker容器内建立到MongoDB的Robomongo SSH隧道连接。首先,您应该在docker容器中安装一个ssh服务器。 https://docs.dock

  • 问题内容: 我正在练习制作一个与PostgreSQL数据库交互的Golang Web应用程序,每个应用程序都在各自的容器上运行。 我正在运行容器 但是我似乎无法正确设置postgres容器。 为简便起见,指向s和其他设置文件的链接位于此要点上(如果您需要在此处,请告诉我)。 工作良好。但是,当应用程序尝试使用以下方法打开数据库连接时: 我从docker compose得到以下错误: 如何使两个容器

  • 作为解决Hibernate OGM连接问题的一部分,我想看看我是否从Robo 3T连接。 我构建我的MongoDB映像并开始运行。 docker ps: MacBook-Pro:GoStopHandle NOTiFY$docker ps容器ID图像 命令创建状态端口名称0375a68b9988 goStop handlemongob:最新 "docker-entrypoint. s..."5秒前上

  • 我有一些docker conatiner,现在我想用ssh进入一个。我通过ssh连接到了docker容器。 但是现在我有一个问题,我不知道我可以用哪个用户访问这个容器? 我在主机(web)上的两个用户中都尝试过