Compose: O link não funciona no Dockerfile para rake

Criado em 4 nov. 2015  ·  3Comentários  ·  Fonte: docker/compose

Atualmente, estou usando o docker compose para conectar meu aplicativo da web ao banco de dados postgre. Minha configuração é assim:

# Dockerfile

FROM rails:onbuild
RUN rake db:create db:migrate db:seed
# config/database.yml

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
    adapter: postgresql
    encoding: utf8
    database: rezeptr_prod
    pool: 5
    username: postgres
    password:
    host: db

development:
  <<: *default
  database: rezeptr_dev

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: rezeptr_test
# docker-compose.yml

db:
  image: postgres
web:
  build: .
  volumes:
    - .:/usr/src/app
  ports:
    - "3000:3000"
  links:
    - db:db

Se eu executar docker-compose up recebo este erro

could not translate host name "db" to address: Name or service not known

Se eu não executar rake db:create ... no Dockerfile e executá-lo assim docker-compose run web rake db:create ele funciona bem e não recebo nenhum erro. Pode me ajudar?

kinquestion

Comentários muito úteis

Sim, os links não estão disponíveis durante a fase de construção. Existem algumas maneiras de fazer com que seus acessórios sejam instalados durante a construção, mas nenhuma delas é realmente simples:

  • você pode criar um novo Dockerfile para o banco de dados, adicionar todas as fontes do projeto e dependências de ruby ​​e executar rake db:create como parte da construção da imagem
  • você pode executar rake db:create como parte do script do ponto de entrada de uma imagem de banco de dados (algo de que não sou fã e não recomendo)
  • você pode excluí-lo da construção e torná-lo uma etapa manual na configuração do ambiente (também não é um ventilador, mas é a opção mais fácil, e o que usamos nos documentos de exemplo http://docs.docker.com/compose / rails /)
  • faça uma compilação de várias etapas que inicia um ambiente temporário, que você pode usar para criar um dump sql dos dados e incluí-lo na imagem do banco de dados. Não há um grande conjunto de ferramentas para isso ainda, mas estou trabalhando em algo em https://github.com/dnephin/buildpipe. Ainda não há documentos para ele, então provavelmente você não vai querer usá-lo.

Todos 3 comentários

Sim, os links não estão disponíveis durante a fase de construção. Existem algumas maneiras de fazer com que seus acessórios sejam instalados durante a construção, mas nenhuma delas é realmente simples:

  • você pode criar um novo Dockerfile para o banco de dados, adicionar todas as fontes do projeto e dependências de ruby ​​e executar rake db:create como parte da construção da imagem
  • você pode executar rake db:create como parte do script do ponto de entrada de uma imagem de banco de dados (algo de que não sou fã e não recomendo)
  • você pode excluí-lo da construção e torná-lo uma etapa manual na configuração do ambiente (também não é um ventilador, mas é a opção mais fácil, e o que usamos nos documentos de exemplo http://docs.docker.com/compose / rails /)
  • faça uma compilação de várias etapas que inicia um ambiente temporário, que você pode usar para criar um dump sql dos dados e incluí-lo na imagem do banco de dados. Não há um grande conjunto de ferramentas para isso ainda, mas estou trabalhando em algo em https://github.com/dnephin/buildpipe. Ainda não há documentos para ele, então provavelmente você não vai querer usá-lo.

OK fixe! : +1: Primeiro, obrigado por sua longa descrição! Vou executá-lo como uma etapa manual, isso deve ser suficiente por enquanto. Mais tarde, poderia pensar em outras etapas!

@dazorni Você poderia atualizar as etapas para resolver. Entrei nisso e tento descobrir. Eu sei que é difícil de reproduzir, mas agradeço muito se você puder mostrar :).

Esta página foi útil?
0 / 5 - 0 avaliações