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

如何使用docker-compose连接到mongoDB?

熊博远
2023-03-14

这是我的docker-compose.yml

mongo:
  image: tutum/mongodb
  environment:
    - AUTH=no
  volumes:
    - /Users/andrey/docker/mongodb:/mongo/db
  ports:
    - "27017:27017"
parser:
  image: nazandr/goparser

和Dockerfile goparser:

FROM golang:1.8

WORKDIR /app

ADD parser.go /app/
    RUN go get github.com/PuerkitoBio/goquery; go get gopkg.in/mgo.v2; go build -o parser

ENTRYPOINT ["./parser"]

连接MongoDB需要使用哪个地址?

共有2个答案

洪飞鸿
2023-03-14

我就是这样做的

version: '3.4'

services:
eventstoresample: 
  image: eventstoresample
  container_name: "es_api"
  build:
    context: .
    dockerfile: EventStoreSample/Dockerfile
  networks:
    clusternetwork:
      ipv4_address: 172.16.0.12

eventstore: 
  image: eventstore/eventstore
  container_name: "es"
  environment:
    - EVENTSTORE_INT_IP=172.16.0.13
    - EVENTSTORE_EXT_HTTP_PORT=2113
    - EVENTSTORE_EXT_TCP_PORT=1113
    - EVENTSTORE_EXT_HTTP_PREFIXES=http://*:2113/
  ports:
    - "1113:1113"
    - "2113:2113"
  networks:
    clusternetwork:
      ipv4_address: 172.16.0.13

mongodb:
  image: mongo:latest
  container_name: "mongodb"
  environment:
    - MONGO_INITDB_ROOT_USERNAME=test
    - MONGO_INITDB_ROOT_PASSWORD=test
  ports:
    - "27014:27017"
  networks:
    clusternetwork:
      ipv4_address: 172.16.0.14
networks:
  clusternetwork:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.16.0.0/24

以及c#中的MongoDb代码

using MongoDB.Driver;
using System;
using System.Threading.Tasks;

namespace EventStoreSample.MongoDbConfigs
{
  public class MongoDb : IMongoDb
  {
    private IMongoCollection<T> GetCollection<T>()
    {
        var server = new MongoServerAddress(host: "172.16.0.14", port: 27017);
        //var server = new MongoServerAddress(host: "localhost", port: 27014);
        var credentials = MongoCredential.CreateCredential(
            databaseName: "admin",
            username: "test",
            password: "test"
        );
        var mongodbClientSettings = new MongoClientSettings
        {
            Credential = credentials,
            Server = server,
            ConnectionMode = ConnectionMode.Standalone,
            ServerSelectionTimeout = TimeSpan.FromSeconds(3)
        };
        MongoClient dbClient = new MongoClient(mongodbClientSettings);

        var database = dbClient.GetDatabase("EventSampleApiDB");
        var collection = database.GetCollection<T>(typeof(T).Name);
        return collection;
    }

    public async Task InsertOneAsync<T>(T entity)
    {
        await GetCollection<T>().InsertOneAsync(entity);
    }
  }
}

Api项目中的docker文件

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /src
COPY . .

RUN dotnet restore "EventStoreSample/EventStoreSample.csproj"
RUN dotnet build "EventStoreSample/EventStoreSample.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "EventStoreSample/EventStoreSample.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "EventStoreSample.dll"]
公羊新
2023-03-14

您可以执行以下操作:

version: '3'

services:
  mongo:
    image: 'mongo:3.4.1'
    ports:
      - '27017:27017'
    volumes:
      - 'mongo:/data/db'

  puma:
    tty: true
    stdin_open: true
    depends_on:
      - 'mongo'
    build:
      context: .
      dockerfile: Dockerfile.puma
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    ports:
      - '3000:3000'
    volumes:
      - '.:/app'
    environment:
      - SECRET_KEY_BASE=secret
      - MONGO_URL=mongodb://mongo:27017/app_development
volumes:
  mongo:

您可能已经注意到,您可以从位于同一docker compose中的其他容器连接到运行在mongo容器上的mongo服务。yml文件使用连接字符串,如mongodb://mongo:27017

如果要从主机连接,可以使用mongodb://localhost:27017如果您如上所示公开了mongo端口。

 类似资料:
  • 我有一台安装了PostgreSQL的服务器。我的所有服务都在容器中工作(docker-compose)。我想从容器中使用我的主机PostgreSQL。但是我有错误: 我的docker compose使用主机网络模式,如下所示: 我的数据库连接URL是:jdbc:postgresql://localhost:5432/shop-bd

  • 我想在一个容器中运行 RabbitMQ,在另一个容器中运行工作进程。工作进程需要访问 RabbitMQ。 我希望这些通过进行管理。 这是我的<代码>docker compose。迄今为止,yml文件: 所以我暴露了RabbitMQ端口。工作进程使用以下URL访问RabbitMQ: 这是他们在官方教程中使用的,但是已被替换为,因为容器应该可以使用与容器名称相同的主机名来发现: 默认情况下,“合成”会

  • 我试图运行在通过包含文件()在虚拟机中,但我无法连接到,并且在尝试连接失败时收到的消息如下所示: 如果您注意到,docker能够连接到docker compose文件中提到的其他服务,其中一个是前两行显示的。在docker compose文件中调用kibana的命令如下: 如果我做了,它会给我以下信息: 在这里发布这个问题之前,我在google上广泛搜索了这个问题,并尝试了人们对这个问题的各种建议

  • 问题内容: 我在Mac OS 10.8.5上安装了docker-machine 0.1.0和docker-compose 1.1.0。 Docker-machine正常运行,并且能够通过docker-machine ssh连接。 但是无法从docker-compose连接。 无法通过http + unix://var/run/docker.sock连接到Docker守护程序-它正在运行吗? 如果它

  • 问题内容: 我收到一条错误消息,提示我无法连接到Docker守护程序。我调查了其他人遇到类似问题的答案,但没有帮助。我正在运行Ubuntu 15.10版本。我将尝试提供我所有的信息。 Docker版本 Docker-Compose版本 如果我尝试停止或启动服务,就会发生这种情况。 如果我跑步 任何帮助将不胜感激。让我知道您是否需要更多信息。 问题答案: 我发现了这个问题,似乎可以解决我的问题。 G

  • 我在Mac OS 10.8.5上安装了docker-machine 0.1.0和docker-compose 1.1.0。 docker-machine运行正常,并且能够通过docker-machine SSH进行连接。 但无法从Docker-Compose连接。 无法连接到HTTP+UNIX上的Docker后台进程://var/run/Docker.sock-它正在运行吗? 如果它位于非标准位置