4 votes

Docker rails mongodb NoServerAvailable

Je suis en train de construire un projet avec 3 dockers.

  • API avec Rails
  • Site web angular / webpack
  • DB avec mongodb

J'ai donc un docker-compose pour tout gérer.

Mon problème est que lorsque je veux ensemencer ma base de données, j'ai une erreur :

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

J'ai essayé de nombreuses choses, j'utilise actuellement le système version bêta de Docker native sur OSX .

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

Mon seeds.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

Et mon mongoid.yml C'est normal que j'utilise localhost car avec la version beta, c'est sur localhost. Quand j'ai essayé avec docker-machine, je l'ai changé pour l'ip de docker.

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

Une fois que mon docker-compose up -d j'essaie de ratisser avec docker-compose run api rake db:seed

Tous les conteneurs fonctionnent, et je peux y accéder depuis mon navigateur sans problème.

Quand je désinstalle docker native et utilise boot2docker, ça marche.

Quelqu'un a-t-il une idée de l'origine du problème ?

0voto

maximski Points 428

Vous devez utiliser

- db:27017

dans la configuration de vos hôtes de l mongoid.yml où "db" est le nom de votre service mongo dans le fichier docker-compose.yml .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X