【问题标题】:Docker rails mongodb NoServerAvailableDocker rails mongodb NoServerAvailable
【发布时间】:2016-05-27 14:52:50
【问题描述】:

我正在用 3 个 docker 构建一个项目。

  • API 与 Rails
  • 网站角度/webpack
  • 带有 mongodb 的数据库

所以我有一个docker-compose 来处理所有事情。

我的问题是当我想为我的数据库做种时,我有一个错误:

Mongo::Error::NoServerAvailable: No server is available matching  preference: #<Mongo::ServerSelector::Primary:0x47121755943460 tag_sets=[] server_selection_timeout=30 local_threshold=0.015>

我尝试了很多东西,我目前正在使用 OSX 上的 Docker 原生测试版

version: '2'
services:
    web:
        build: web/
        ports:
            - "80:8080"
        links:
            - api
        depends_on:
            - api
        volumes:
            - ./web:/app
    api:
        build: api/
        command: rails s -p 3000 -b '0.0.0.0'
        volumes:
            - ./api:/app
            - ./api:/app/tmp/pids
        links:
            - db
        #depends_on:
            #- db
        ports:
            - "3000:3000"
        environment:
            RAILS_ENV: development
    db:
        image: mongo:3.2
        ports:
            - 27017:27017

我的种子.rb

require 'csv'

file = File.read("db/data.csv")
csv = CSV.parse(file, :headers => false, :col_sep => ";")

csv.each do |row|
    Datum.create(
        :country_code   => row[0],
        :country        => row[1]
    )
end

还有我的 mongoid.yml 我使用 localhost 很正常,因为对于 beta 版本,它位于 localhost 上。当我尝试使用 docker-machine 时,我将其更改为 docker ip。

development:
  clients:
    default:
      database: api_development
      hosts:
        - localhost:27017
      options:
  options:
test:
  clients:
    default:
      database: api_test
      hosts:
        - localhost:27017
      options:
        read:
          mode: :primary
        max_pool_size: 1

一旦我的docker-compose up -d 我尝试与docker-compose run api rake db:seed 一起耙

所有容器都在运行,我可以从导航器毫无问题地访问它。

当我卸载 docker native 并使用 boot2docker 时,它正在工作。

有人知道问题出在哪里吗??

【问题讨论】:

    标签: ruby-on-rails ruby mongodb docker docker-compose


    【解决方案1】:

    你需要使用

    - db:27017
    

    mongoid.yml 的主机配置中,其中“db”是docker-compose.yml 中的 mongo 服务的名称。

    【讨论】:

    • 谢谢,也许我现在没有从事那个项目,但我记得错误来自docker OSX Beta 而不是使用docker-machine
    • 我还注意到您应该使用像 uri: mongodb://db:27017 这样的 mongo uri,而不是通过主机和用户参数进行连接,否则 Mongoid 将无法进行身份验证。
    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2019-06-14
    • 2017-03-05
    相关资源
    最近更新 更多