【问题标题】:docker-compose mongo rails connection failsdocker-compose mongo rails 连接失败
【发布时间】:2015-08-04 21:39:34
【问题描述】:

我在开发环境中有一个带有 mongodb 的 rails 应用程序。 无法将 mongodb 与 docker 连接。可以使用相同的 mongoid 配置连接到本地 mongodb。我尝试将主机作为 localhost 更改为 0.0.0.0 但没有奏效。 设置中缺少什么?

我怀疑 Docker 中的 mongo 尚未启动或绑定。如果我将 mongoid 配置更改为::最近,它会说没有找到节点。

错误信息是, 助力车::Errors::ConnectionFailure in Product#index

无法连接到副本集的主节点#]>

Dockerfile

#FROM ruby:2.2.1-slim
FROM rails:4.2.1
MAINTAINER Sandesh Soni, <my@email.com>
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /gmv
WORKDIR /gmv
# Add db directory to /db
ADD Gemfile /gmv/Gemfile
RUN bundle install
ADD ./database /data/db
ADD . /gmv

docker-compose.yml

web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
    - .:/gmv
  ports:
    - "3000:3000"
  links:
    - db
db:
  image: mongo
  command: "--smallfiles --bind_ip 0.0.0.0 --port 27027 -v"
  volumes:
    - data/mongodb:/data/db
  ports:
    - "27017:27017"

【问题讨论】:

  • 您在哪里尝试连接到您的 MongoDB 实例?如果您想在浏览器中连接到它,您需要指向您的 Docker 主机 URL (boot2docker ip),并为其提供正确的端口(在您的情况下为 27027)。如果你想从web容器连接到它,你可以使用db主机名(它是由Docker在/etc/hosts/中自动添加的)或者Docker Compose创建的环境变量(类似于YOURAPP_DB_1_PORT_27027_TCP_ADDR (见这里docs.docker.com/compose/env)。
  • 我用的是linux机器,不是mac。我尝试使用 MYAPP_DB_1_PORT_27027_TCP_ADDR,我收到错误无法连接到副本集的主节点#<:cluster:70197059955820 resolved_address="127.0.53.53:27017">]> 我正在使用在本地开发中,所以 0.0.0.3000 是 url;上面解析的地址 127.0.53.53 表示冲突 ip。

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


【解决方案1】:

在您的主机上执行docker run yourapp env,然后在输出中查找与您的数据库相关的IP 地址。您需要使用该 IP 地址和端口连接到在容器中运行的数据库。

here提出了类似的问题

【讨论】: