mongodb 连接被拒绝 docker-撰写

mongodb connection refused docker-compose

docker文件包含:-

FROM ruby:2.2.3-slim

MAINTAINER Milan Rawal <milan@gmail.com>

RUN apt-get update && apt-get install -qq -y build-essential nodejs libmagickcore-dev imagemagick libmagickwand-dev libxml2-dev libxslt1-dev git-core curl htop --fix-missing --no-install-recommends

ENV INSTALL_PATH /air_scout
RUN mkdir -p $INSTALL_PATH

WORKDIR $INSTALL_PATH

COPY Gemfile Gemfile
RUN bundle install

COPY . .

RUN bundle exec rake RAILS_ENV=production   SECRET_TOKEN=f6801f0744ff2e86b0baa542fc55075b5b79c922c518e34484cfe6a6c2149510973fa6c90d36c05907f8bf9114b6b33594f3630810b332ef3717b8b8f4f04b1f assets:precompile

VOLUME ["$INSTALL_PATH/public"]

CMD bundle exec unicorn -c config/unicorn.rb  

并且 docker-compose.yml 文件包含为:-

version: '2'
services:
  mongodb:
    image: mongo:latest
    ports:
      - '27017:27017'
    volumes:
      - air_scout-mongodb:/data/db
  redis:
    image: redis:3.0.5
    ports:
  - '6379:6379'
    volumes:
      - air_scout-redis:/var/lib/redis
  air_scout:
    build: .
    ports:
      - '8000:8000'
    environment:
      - DATABASE_URL=mongodb:27017
    links:
      - mongodb
      - redis
    env_file:
      - .air_scout.env
  resque:
    build: .
    environment:
      - QUEUE=*
      - DATABASE_URL=mongodb:27017
    links:
      - mongodb
      - redis
    command: bundle exec rake environment resque:work
    env_file:
      - .air_scout.env
volumes:
  air_scout-redis:
  air_scout-mongodb:  

当我做 "docker-compose build" 时,每件事都正确构建,当我做 "docker-compose up" 时,应用程序启动,我可以在 air_scout 中访问应用程序 运行虚拟机主机上的容器,但在数据库访问应用程序上。页面我收到错误信息:

"air_scout_1 | [fe9cdec8-36e4-4974-aef3-18b1e73ea030] [DEBUG] MONGODB | Connection refused - connect(2) for 127.0.0.1:27017"。

在我的 mongoid.yml 文件中,我做了如下配置:

hosts:
    - localhost:27017
    - <%= ENV['DATABASE_URL'] %>  

到底是什么问题,从昨天开始我就很头疼。谢谢你。

执行"docker inspect CID" 给出json 数据,其中Networsetting 下的Ipaddress 为"" 空。我怎样才能访问这个空IP。

编辑:- mongoid.yml 文件中的内容为:-

production:
  clients:
    default:
      database: air_scout_test
      hosts:
        - localhost:27017
        - <%= ENV['DATABASE_URL'] %>
      options:
        max_pool_size: 1
  options:
     raise_not_found_error: false

您必须从 air_scout 容器连接到 mongodb:27017 而不是 127.0.0.1:27017。

air_scout 容器的链接将为 redis 和 mongodb 容器创建 /etc/hosts 条目。可以使用这些名称访问链接的服务。

https://docs.docker.com/compose/compose-file/#/links

您确实使用正确的值 mongodb:27017 设置了环境变量 DATABASE_URL,但错误消息仍然包含 127.0.0.1:27017。所以它试图连接到那里而不是 mongodb:27017。我没有使用 mongoid 的经验,但我猜你应该只留下 DATABASE_URL 行。如果这不起作用,请使用 mongodb:27017

如果你想看看发生了什么,docker 执行你的 运行 air_scout 容器

docker ps
# take the exact name of the air_scout container in the output
# i am guessing compose_air_scout but i might be off
docker exec -ti compose_air_scout /bin/bash
cat /etc/hosts
ping mongodb
# maybe try an interactive mongodb client