1

I have a rails app which uses docker to run the app even for development.

This is docker-compose file

web:
  build: .
  dockerfile: Dockerfile.development
  environment:
    - ALGOLIA_API_KEY
    - ALGOLIA_APP_ID
    - ALGOLIA_INDEX
    - ALGOLIA_SEARCH_KEY
    - AWS_ACCESS_KEY
    - AWS_S3_BUCKET_NAME
    - AWS_SECRET_ACCESS_KEY
    - COVERAGE
    - DEV_EMAIL
    - INTERCOM_API_KEY
    - INTERCOM_API_SECRET
    - INTERCOM_APP_ID
    - LABS_MAILGUN_PASSWORD
    - LABS_MAILGUN_USERNAME
    - MAILGUN_API_KEY
    - MAILGUN_DOMAIN
    - LOB_API_KEY
    - LOG_LEVEL
    - MAX_THREADS
    - NEW_RELIC_KEY
    - OUTBOUND_KEY
    - PAID_API_BASE
    - PAID_DEFAULT_PLAN_ID
    - PAID_PUBLIC_API_BASE
    - PAID_PUBLISHABLE_KEY
    - PAID_SECRET_KEY
    - PLAID_CLIENT_ID
    - PLAID_PUBLIC_KEY
    - PLAID_SECRET_KEY
    - PLATFORM_API_TOKEN
    - RACK_ENV=development
    - RACK_TIMEOUT
    - RAILS_ENV=development
    - REDISCLOUD_URL
    - REDIS_PROVIDER
    - RESQUE_LOG_LEVEL
    - SECRET_KEY_BASE
    - SECRET_KEY_BASE_PRODUCTION
    - SECRET_KEY_BASE_STAGING
    - STRIPE_ACCOUNT_ID
    - STRIPE_CLIENT_ID
    - STRIPE_PUBLISHABLE_KEY
    - STRIPE_SECRET_KEY
    - STRIPE_TEST_CLIENT_ID
    - STRIPE_TEST_PUBLISHABLE_KEY
    - STRIPE_TEST_SECRET_KEY
    - TEST_ENV_NUMBER
    - UNICORN_TIMEOUT
    - VERBOSE
    - WEB_CONCURRENCY
  labels:
    - convox.port.543.protocol=tls
    - convox.port.543.proxy=true
    - convox.port.90.proxy=true
  links:
    - database
    - redis
  ports:
    - 90:4000
    - 543:4001

database:
  image: convox/postgres
  ports:
    - 5432
  volumes:
    - /Users/vishal.awathare/Library/Application\ Support/Postgres/var-11

database-test:
  image: convox/postgres
  ports:
    - 5432
  volumes:
    - /Users/vishal.awathare/Library/Application\ Support/Postgres/var-11

redis:
  environment:
    - RACK_ENV=development
    - RACK_TIMEOUT
    - RAILS_ENV=development
  image: convox/redis
  ports:
    - 6379

resque:
  build: .
  dockerfile: Dockerfile.development
  command: bundle exec rake resque:work
  environment:
    - ALGOLIA_API_KEY
    - ALGOLIA_APP_ID
    - ALGOLIA_INDEX
    - ALGOLIA_SEARCH_KEY
    - AWS_ACCESS_KEY
    - AWS_S3_BUCKET_NAME
    - AWS_SECRET_ACCESS_KEY
    - COVERAGE
    - DEV_EMAIL
    - INTERCOM_API_KEY
    - INTERCOM_API_SECRET
    - INTERCOM_APP_ID
    - LABS_MAILGUN_PASSWORD
    - LABS_MAILGUN_USERNAME
    - MAILGUN_API_KEY
    - MAILGUN_DOMAIN
    - LOB_API_KEY
    - LOG_LEVEL
    - MAX_THREADS
    - NEW_RELIC_KEY
    - OUTBOUND_KEY
    - PAID_API_BASE
    - PAID_DEFAULT_PLAN_ID
    - PAID_PUBLIC_API_BASE
    - PAID_PUBLISHABLE_KEY
    - PAID_SECRET_KEY
    - PLAID_CLIENT_ID
    - PLAID_PUBLIC_KEY
    - PLAID_SECRET_KEY
    - PLATFORM_API_TOKEN
    - QUEUE=*
    - RACK_ENV=development
    - RACK_TIMEOUT
    - RAILS_ENV=development
    - REDISCLOUD_URL
    - REDIS_PROVIDER
    - RESQUE_LOG_LEVEL
    - RESQUE_TERM_TIMEOUT=10
    - SECRET_KEY_BASE
    - SECRET_KEY_BASE_PRODUCTION
    - SECRET_KEY_BASE_STAGING
    - STRIPE_ACCOUNT_ID
    - STRIPE_CLIENT_ID
    - STRIPE_PUBLISHABLE_KEY
    - STRIPE_SECRET_KEY
    - STRIPE_TEST_CLIENT_ID
    - STRIPE_TEST_PUBLISHABLE_KEY
    - STRIPE_TEST_SECRET_KEY
    - TERM_CHILD=1
    - TEST_ENV_NUMBER
    - UNICORN_TIMEOUT
    - VERBOSE
    - WEB_CONCURRENCY
  links:
    - database
    - redis

clock:
  build: .
  dockerfile: Dockerfile.development
  command: bundle exec rake resque:scheduler
  environment:
    - ALGOLIA_API_KEY
    - ALGOLIA_APP_ID
    - ALGOLIA_INDEX
    - ALGOLIA_SEARCH_KEY
    - AWS_ACCESS_KEY
    - AWS_S3_BUCKET_NAME
    - AWS_SECRET_ACCESS_KEY
    - COVERAGE
    - DEV_EMAIL
    - INTERCOM_API_KEY
    - INTERCOM_API_SECRET
    - INTERCOM_APP_ID
    - LABS_MAILGUN_PASSWORD
    - LABS_MAILGUN_USERNAME
    - MAILGUN_API_KEY
    - MAILGUN_DOMAIN
    - LOB_API_KEY
    - LOG_LEVEL
    - MAX_THREADS
    - NEW_RELIC_KEY
    - OUTBOUND_KEY
    - PAID_API_BASE
    - PAID_DEFAULT_PLAN_ID
    - PAID_PUBLIC_API_BASE
    - PAID_PUBLISHABLE_KEY
    - PAID_SECRET_KEY
    - PLAID_CLIENT_ID
    - PLAID_PUBLIC_KEY
    - PLAID_SECRET_KEY
    - PLATFORM_API_TOKEN
    - RACK_ENV=development
    - RACK_TIMEOUT
    - RAILS_ENV=development
    - REDISCLOUD_URL
    - REDIS_PROVIDER
    - RESQUE_LOG_LEVEL
    - SECRET_KEY_BASE
    - SECRET_KEY_BASE_PRODUCTION
    - SECRET_KEY_BASE_STAGING
    - STRIPE_ACCOUNT_ID
    - STRIPE_CLIENT_ID
    - STRIPE_PUBLISHABLE_KEY
    - STRIPE_SECRET_KEY
    - STRIPE_TEST_CLIENT_ID
    - STRIPE_TEST_PUBLISHABLE_KEY
    - STRIPE_TEST_SECRET_KEY
    - TEST_ENV_NUMBER
    - UNICORN_TIMEOUT
    - VERBOSE
    - WEB_CONCURRENCY
  links:
    - database
    - redis

test:
  build: .
  dockerfile: Dockerfile.development
  environment:
    - ALGOLIA_API_KEY
    - ALGOLIA_APP_ID
    - ALGOLIA_INDEX
    - ALGOLIA_SEARCH_KEY
    - AWS_ACCESS_KEY
    - AWS_S3_BUCKET_NAME
    - AWS_SECRET_ACCESS_KEY
    - COVERAGE
    - DEV_EMAIL
    - INTERCOM_API_KEY
    - INTERCOM_API_SECRET
    - INTERCOM_APP_ID
    - LABS_MAILGUN_PASSWORD
    - LABS_MAILGUN_USERNAME
    - MAILGUN_API_KEY
    - MAILGUN_DOMAIN
    - LOB_API_KEY
    - LOG_LEVEL
    - MAX_THREADS
    - NEW_RELIC_KEY
    - OUTBOUND_KEY
    - PAID_API_BASE
    - PAID_DEFAULT_PLAN_ID
    - PAID_PUBLIC_API_BASE
    - PAID_PUBLISHABLE_KEY
    - PAID_SECRET_KEY
    - PLAID_CLIENT_ID
    - PLAID_PUBLIC_KEY
    - PLAID_SECRET_KEY
    - PLATFORM_API_TOKEN
    - RACK_ENV=test
    - RACK_TIMEOUT
    - RAILS_ENV=test
    - REDISCLOUD_URL
    - REDIS_PROVIDER
    - RESQUE_LOG_LEVEL
    - SECRET_KEY_BASE
    - SECRET_KEY_BASE_PRODUCTION
    - SECRET_KEY_BASE_STAGING
    - STRIPE_ACCOUNT_ID
    - STRIPE_CLIENT_ID
    - STRIPE_PUBLISHABLE_KEY
    - STRIPE_SECRET_KEY
    - STRIPE_TEST_CLIENT_ID
    - STRIPE_TEST_PUBLISHABLE_KEY
    - STRIPE_TEST_SECRET_KEY
    - TEST_ENV_NUMBER
    - UNICORN_TIMEOUT
    - VERBOSE
    - WEB_CONCURRENCY
  links:
    - database-test
    - redis

admin:
  build: .
  dockerfile: Dockerfile.development
  environment:
    - ALGOLIA_API_KEY
    - ALGOLIA_APP_ID
    - ALGOLIA_INDEX
    - ALGOLIA_SEARCH_KEY
    - AWS_ACCESS_KEY
    - AWS_S3_BUCKET_NAME
    - AWS_SECRET_ACCESS_KEY
    - COVERAGE
    - DEV_EMAIL
    - INTERCOM_API_KEY
    - INTERCOM_API_SECRET
    - INTERCOM_APP_ID
    - LABS_MAILGUN_PASSWORD
    - LABS_MAILGUN_USERNAME
    - MAILGUN_API_KEY
    - MAILGUN_DOMAIN
    - LOB_API_KEY
    - LOG_LEVEL
    - MAX_THREADS
    - NEW_RELIC_KEY
    - OUTBOUND_KEY
    - PAID_API_BASE
    - PAID_DEFAULT_PLAN_ID
    - PAID_PUBLIC_API_BASE
    - PAID_PUBLISHABLE_KEY
    - PAID_SECRET_KEY
    - PLAID_CLIENT_ID
    - PLAID_PUBLIC_KEY
    - PLAID_SECRET_KEY
    - PLATFORM_API_TOKEN
    - RACK_ENV=development
    - RACK_TIMEOUT
    - RAILS_ENV=development
    - REDISCLOUD_URL
    - REDIS_PROVIDER
    - RESQUE_LOG_LEVEL
    - SECRET_KEY_BASE
    - SECRET_KEY_BASE_PRODUCTION
    - SECRET_KEY_BASE_STAGING
    - STRIPE_ACCOUNT_ID
    - STRIPE_CLIENT_ID
    - STRIPE_PUBLISHABLE_KEY
    - STRIPE_SECRET_KEY
    - STRIPE_TEST_CLIENT_ID
    - STRIPE_TEST_PUBLISHABLE_KEY
    - STRIPE_TEST_SECRET_KEY
    - TEST_ENV_NUMBER
    - UNICORN_TIMEOUT
    - VERBOSE
    - WEB_CONCURRENCY
  links:
    - database
    - redis

This is my dockerfile.development file

FROM location/app-base-image

# Docker won't let us use $HOME in `ENV PATH=...` without setting HOME first
ENV HOME /root
ENV PATH $HOME/.rbenv/shims:$PATH

RUN rm -rf `rbenv root`
RUN git clone https://github.com/rbenv/rbenv.git /root/.rbenv
RUN mkdir -p "$(rbenv root)"/plugins
RUN git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

RUN rbenv install 2.3.7
RUN rbenv global 2.3.7
RUN rbenv local 2.3.7

RUN gem install bundler -v 1.13.1 && rbenv rehash

COPY .convox/bin/web bin/web
COPY .convox/conf/nginx.conf /etc/nginx/nginx.conf

COPY Gemfile ./Gemfile
COPY Gemfile.lock ./Gemfile.lock
RUN bundle install && rbenv rehash

ENV DATABASE_URL postgres://host
ENV ALGOLIA_APP_ID FOO
ENV REDIS_URL redis://host

COPY . .

CMD ["bin/web"]

First I run

 docker-compose -f docker-compose.development.yml build

It runs sucessfully. Then I run

docker-compose -f docker-compose.development.yml up

This gives me the error

admin_1          | E, [2019-05-21T09:58:40.069558 #8] ERROR -- : could not translate host name "host" to address: Name or service not known
admin_1          |  (PG::ConnectionBad)

I noticed that an environment variable was probably wrongly set. So in dockerfile I changed ENV DATABASE_URL postgres://host to ENV DATABASE_URL postgres://localhost:5432. The error messages then changes to

Is the server running on host "localhost" (127.0.0.1) and accepting     TCP/IP connections on port 5432?

Am I missing something basic?

3
  • DATABASE_URL in admin service must be presented. Commented May 21, 2019 at 10:25
  • @NeverBe tried that does not fix it Commented May 21, 2019 at 10:50
  • i meant ENV var to start "admin" service, if it's not present, it looks for it in database.yml Commented May 21, 2019 at 11:31

1 Answer 1

1

Your database server isn't running in the container that's running your application. Your container seems to be running in the container called database, so there's your hostname.

I would also recommend creating a separate network for your app and attach the containers to that network instead of the default net.

Sign up to request clarification or add additional context in comments.

4 Comments

I am confused. Where should I place database hostname, to get it to work?
You mention at the end of your post that you changed the ENV DATABASE_URL postgres://host to ENV DATABASE_URL postgres://localhost:5432. Try ENV DATABASE_URL postgres://database
sadly that didnt work ` could not translate host name "database" to address: Name or service not known`
can you exec a shell in that container and do a ping database?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.