2016-07-05 93 views
3

的dockerfile組成爲: -MongoDB的連接被拒絕碼頭工人,組成

FROM ruby:2.2.3-slim 

MAINTAINER Milan Rawal <[email protected]> 

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 

而且泊塢窗,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: 

當我做 「泊塢窗 - 撰寫建」每一件事都正確地構建,當我做「碼頭 - 組合」時,應用程序啓動,我可以訪問在vm主機上的air_scout容器中運行的應用程序,但是在數據庫訪問應用程序中。我錯誤爲:

「air_scout_1 | [fe9cdec8-36e4-4974-aef3-18b1e73ea030] [調試] MONGODB |連接被拒絕 - 連接(2)爲127.0.0.1:27017」。

在我mongoid.yml文件我已經做了配置如下圖所示:

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

實際上是什麼問題,我真的敲我的頭從昨天起。謝謝。

做「碼頭檢查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 

回答

4

你要連接到的MongoDB:27017,而不是127.0.0.1:27017從air_scout容器。

air_scout容器的鏈接將爲redis和mongodb容器創建/ etc/hosts條目。鏈接的服務將以這些名稱可訪問。

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

你設置環境變量DATABASE_URL正確的值的MongoDB:27017,但錯誤信息仍包含127.0.0.1:27017。所以它試圖連接那裏而不是mongodb:27017。我沒有mongoid的經驗,但我猜你應該只保留DATABASE_URL。如果不起作用,使用MongoDB的:27017

如果你想看看是怎麼回事,搬運工高管到正在運行的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 
+0

運氣提到獲得相同的調試錯誤消息。但是當我ping到mongodb時,我得到: - 來自172.18.0.3的64個字節:icmp_seq = 14 ttl = 64時間= 0.161 ms。任何猜測。 – codemilan

+0

我的猜測是你的mongoid.yml有問題 - 可能是你的主機配置路徑中有一些錯字,所以默認使用的是localhost。你能把整個事情放在你的問題上嗎? –

+0

非常感謝@Juergen Gmeiner,我編輯了mongoid.yml文件的問題。 – codemilan