2015-10-08 13 views
5

Geliştiriciler için teknoloji yığını ROR, postgres, redis, mongo ile geliştirme ortamı sağlamak için docker-compose kullanıyorum. docker-compose build başarıyla çalışıyor, ancak docker-compose up çalıştırdığımda hatayla karşılaşıldı./home/web/.gem/ruby/2.2.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:152:in `getaddrinfo ': getaddrinfo: Adı veya hizmeti bilinmiyor (SocketError)

web_1 | => Booting Thin 
web_1 | => Rails 4.2.3 application starting in development on http://0.0.0.0:3000 
web_1 | => Run `rails server -h` for more startup options 
web_1 | => Ctrl-C to shutdown server 
web_1 | Exiting 
web_1 | /home/web/.gem/ruby/2.2.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:152:in `getaddrinfo': getaddrinfo: Name or service not known (SocketError) 
web_1 | from /home/web/.gem/ruby/2.2.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:152:in `connect' 
web_1 | from /home/web/.gem/ruby/2.2.0/gems/redis-3.2.1/lib/redis/connection/ruby.rb:211:in `connect' 
web_1 | from /home/web/.gem/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:322:in `establish_connection' 
web_1 | from /home/web/.gem/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:94:in `block in connect' 
web_1 | from /home/web/.gem/ruby/2.2.0/gems/redis-3.2.1/lib/redis/client.rb:279:in `with_reconnect' 

ardından Dockerfile olduğunu

# Base image. 
FROM atlashealth/ruby:2.2.1 

# System dependencies for gems. 
#RUN apt-get update 
#RUN apt-get install -y --no-install-recommends libmysqlclient-dev 
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev 

# Add 'web' user which will run the application. 
RUN adduser web --home /home/web --shell /bin/bash --disabled-password --gecos "" 

# Add directory where all application code will live and own it by the web user. 
RUN mkdir /app 
RUN chown -R web:web /app 

# Install gems separately here to take advantage of container caching of `bundle install`. 
# Also, ensure that gems are installed as the web user and not system-wide so that we can run 
# `fig web bundle install` and the web user will have permissions to update the shared Gemfile.lock. 
ADD Gemfile /app/ 
ADD Gemfile.lock /app/ 
RUN chown -R web:web /app 
USER web 
ENV HOME /home/web 
ENV PATH $PATH:/home/web/.gem/ruby/2.2.0/bin 
ENV GEM_HOME /home/web/.gem/ruby/2.2.0 
ENV GEM_PATH $GEM_HOME 
RUN gem install --user-install bundler 
WORKDIR /app/ 
RUN bundle install 
USER root 

# Add the whole application source to the image and own it all by web:web. 
# Note: this is overwritten in development because fig mounts a shared volume at /app. 
ADD . /app/ 
RUN chown -R web:web /app 

# Clean up APT and /tmp when done. 
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# Default command to run when this container is run. 
USER web 
WORKDIR /app/ 
CMD ["bundle", "exec", "rails", "server"] 

liman işçisi-compose.yml

db: 
    image: postgres 
    ports: 
    - "5432" 

redis: 
    image: redis 
    ports: 
    - "6379" 

sidekiq: 
    build: . 
    command: bundle exec sidekiq 
    links: 
    - db 
    - redis 

web: 
    build: . 
    command: bundle exec rails s -b 0.0.0.0 
    volumes: 
    - .:/app 
    ports: 
    - "3000:3000" 
    links: 
    - db 
    - redis 

Ben çevre postgres'in değişken ve REDIS konak kurulum ve port acc docker-compose run web env komutunun çıkışına yönlendiriliyor. komuta

çıkış docker-compose run web cat /etc/hosts

Starting xyz_db_1... 
Starting xyz_redis_1... 
172.17.0.32 2b231a706e7b 
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.31 redis 799b65ac89cd xyz_redis_1 
172.17.0.31 redis_1 799b65ac89cd xyz_redis_1 
172.17.0.30 db 0bd898e19822 xyz_db_1 
172.17.0.30 db_1 0bd898e19822 xyz_db_1 
172.17.0.30 xyz_db_1 0bd898e19822 
172.17.0.31 xyz_redis_1 799b65ac89cd 

yapılandırma/sidekiq.yml

concurrency: 25 
pidfile: ./tmp/pids/sidekiq.pid 
logfile: ./log/sidekiq.log 
queues: 
    - default 
    - [priority, 2] 
daemon: true 

yapılandırma/uygulama-config.yml

default: &default 
    redis_host: <%= ENV['XYZ_REDIS_1_PORT_6379_TCP_ADDR'] %> 
    redis_port: <%= ENV ['XYZ_REDIS_1_PORT_6379_TCP_PORT'] %> 
    redis_namespace: 'RAILS_CACHE' 

development: 
    <<: *default 
    redis_host: <%= ENV['XYZ_REDIS_1_PORT_6379_TCP_ADDR'] %> 
    redis_port: <%= ENV['XYZ_REDIS_1_PORT_6379_TCP_PORT'] %> 

yapılandırma/başlatıcılar/redis.rb

# global variable to access Redis cache 
# Requirement: Redis server should be up and running 
# at below specified host and port 
$redis = Redis.new(
    :host => APP_CONFIG["redis_host"], 
    :port => APP_CONFIG["redis_port"] 
) 
+0

Burada neler olduğunu söylemek zor. Öneririm: ortam değişkenlerini kullanmayın,/etc/hosts tarafından sağlanan hostname'leri kullanın ('docker-compose web kedisi/etc/hosts' komutunu kontrol edin). Örn: sadece 'redis' redis_1 değil kullanın. Sanırım altta olan ruby ​​ve hostnames ile ilgili bir sorun olduğunu hatırlıyorum. – dnephin

+0

@dnephin, düzenlemelere bakın. 'Docker-compose web kedisi/etc/hosts' uygulamasının çıktısını ekledim –

+0

Yanlış anladığım takdirde özür dilerim, ancak bu uygulama redisinizin doğru şekilde yapılandırılmamış gibi görünüyor. Redis gemini tek başına mı kullanıyorsunuz yoksa sidekiq/activejob gibi bir kütüphane mi kullanıyorsunuz? – christoshrousis

cevap

1

REDIS_URL değişkeni Sidekiq ve Redis gem hem Redis URL geçirmek için kullanılabilir.

Bu ortam değişkeni böyle docker-compose.yml ayarlanabilir: varsayılan olarak REDIS_URL kullanacak Sidekiq ve Redis taşlar gibi

db: 
    image: postgres 
    ports: 
    - "5432" 

redis: 
    image: redis 
    ports: 
    - "6379" 

web: 
    build: . 
    command: bundle exec rails s -b 0.0.0.0 
    volumes: 
    - .:/app 
    ports: 
    - "3000:3000" 
    links: 
    - db 
    - redis 
    environment: 
    REDIS_URL: "redis://redis:6379" 

, ayrıca bu varsayılan davranışı geçersiz olmadığından emin olmak gerekir sizin dosyaları düzenle. Artık dosyayı config/initializers/redis.rb gerekmez, ve sizin config/app-config.yml yalnızca ad içermelidir: uygulama hakkında daha fazla bilmeden

default: &default 
    redis_namespace: 'RAILS_CACHE' 

development: 
    <<: *default 
+0

Fark yok. Aynı hatayı alma –

+0

'Sidekiq' ou' Redis' yapılandırmasını geçersiz kılan bazı yapılandırma veya başlatıcı dosyalarınız var mı? Bu, REDIS_URL değişkeninin neden geçersiz kıldığını açıklar. – haradwaith

+0

Lütfen redis ve sidekiq yapılandırmalarını görmek için düzenlemelere bakın. –

İlgili konular