Compose: Le lien ne fonctionne pas dans Dockerfile pour rake

Créé le 4 nov. 2015  ·  3Commentaires  ·  Source: docker/compose

Actuellement, j'utilise docker compose pour connecter mon application Web à la base de données postgre. Ma configuration ressemble à ceci:

# 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

Si j'exécute docker-compose up j'obtiens cette erreur

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

Si je n'exécute pas rake db:create ... dans le Dockerfile et que je l'exécute comme ceci docker-compose run web rake db:create cela fonctionne bien et je n'obtiens aucune erreur. Pouvez-vous m'aider?

kinquestion

Commentaire le plus utile

Oui, les liens ne sont pas disponibles pendant la phase de construction. Il existe plusieurs façons d'installer vos appareils pendant la construction, mais aucune d'entre elles n'est vraiment simple:

  • vous pouvez créer un nouveau Dockerfile pour la base de données, ajouter toute la source du projet et les dépendances ruby, et exécuter le rake db:create dans le cadre de la construction de l'image
  • vous pouvez exécuter rake db:create dans le cadre du script de point d'entrée d'une image de base de données (quelque chose dont je ne suis pas fan et que je ne recommande pas vraiment)
  • vous pouvez l'exclure de la construction et en faire une étape manuelle de la configuration de l'environnement (pas non plus un ventilateur, mais c'est l'option la plus simple, et ce que nous utilisons dans les documents d'exemple http://docs.docker.com/compose /des rails/)
  • créer une génération en plusieurs étapes qui démarre un environnement temporaire, que vous pouvez utiliser pour créer un vidage SQL des données, et l'inclure dans l'image de la base de données. Il n'y a pas encore de bons outils pour cela, mais je travaille sur quelque chose dans https://github.com/dnephin/buildpipe. Il n'y a pas encore de documentation pour cela, vous ne voudrez probablement pas l'utiliser.

Tous les 3 commentaires

Oui, les liens ne sont pas disponibles pendant la phase de construction. Il existe plusieurs façons d'installer vos appareils pendant la construction, mais aucune d'entre elles n'est vraiment simple:

  • vous pouvez créer un nouveau Dockerfile pour la base de données, ajouter toute la source du projet et les dépendances ruby, et exécuter le rake db:create dans le cadre de la construction de l'image
  • vous pouvez exécuter rake db:create dans le cadre du script de point d'entrée d'une image de base de données (quelque chose dont je ne suis pas fan et que je ne recommande pas vraiment)
  • vous pouvez l'exclure de la construction et en faire une étape manuelle de la configuration de l'environnement (pas non plus un ventilateur, mais c'est l'option la plus simple, et ce que nous utilisons dans les documents d'exemple http://docs.docker.com/compose /des rails/)
  • créer une génération en plusieurs étapes qui démarre un environnement temporaire, que vous pouvez utiliser pour créer un vidage SQL des données, et l'inclure dans l'image de la base de données. Il n'y a pas encore de bons outils pour cela, mais je travaille sur quelque chose dans https://github.com/dnephin/buildpipe. Il n'y a pas encore de documentation pour cela, vous ne voudrez probablement pas l'utiliser.

Ok cool! : +1: Tout d'abord, merci pour votre longue description! Je vais l'exécuter comme une étape manuelle, cela devrait suffire pour l'instant. Plus tard, je pourrais penser à d'autres étapes!

@dazorni Pourriez-vous s'il vous plaît mettre à jour les étapes à résoudre. Je suis entré dans ça et j'essaye de découvrir. Je sais que c'est difficile à reproduire, mais j'apprécie vraiment si vous pouvez montrer :).

Cette page vous a été utile?
0 / 5 - 0 notes