Docker-compose连接MongoDB时Rails失败

4
我有一个使用MongoDB的Rails应用程序,在开发环境中。无法通过Docker连接到MongoDB,但是可以通过相同的mongoid配置连接到本地MongoDB。我尝试将主机更改为localhost到0.0.0.0,但没有起作用。设置缺少什么?
我的疑问是Docker中的Mongo未启动或绑定。如果我将mongoid配置更改为读取:nearest,则会显示未找到节点。
错误消息是: Product#index中的Moped :: Errors :: ConnectionFailure 无法连接到复制集#>的主节点。

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,请参见这里https://docs.docker.com/compose/env/)。 - linkyndy
1
我正在使用Linux机器,而不是Mac。我尝试使用MYAPP_DB_1_PORT_27027_TCP_ADDR,但出现错误“无法连接到副本集#<Moped :: Cluster:70197059955820 @ seeds = [<Moped :: Node resolved_address =” 127.0.53.53:27017 ">]>”。我正在进行本地开发,因此0.0.0.3000是URL;上述解析地址127.0.53.53表示冲突的IP。 - Sandesh Soni
1个回答

0
在您的主机上执行 docker run yourapp env,然后在输出中查找与数据库相关的 IP 地址。您需要使用该 IP 地址和端口来连接在容器中运行的数据库。
类似问题已经在这里提问过。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接