Compose: El enlace no funciona en Dockerfile para rake

Creado en 4 nov. 2015  ·  3Comentarios  ·  Fuente: docker/compose

Actualmente estoy usando docker compose para conectar mi aplicación web con la base de datos de postgre. Mi configuración se ve así:

# 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 ejecuto docker-compose up obtengo este error

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

Si no ejecuto rake db:create ... en el Dockerfile y lo ejecuto así docker-compose run web rake db:create , funciona bien y no obtengo ningún error. ¿Me puedes ayudar?

kinquestion

Comentario más útil

Sí, los enlaces no están disponibles durante la fase de construcción. Hay algunas formas de instalar sus accesorios durante la compilación, pero ninguna de ellas es realmente sencilla:

  • puede crear un nuevo Dockerfile para la base de datos, agregar toda la fuente del proyecto y las dependencias de ruby, y ejecutar rake db:create como parte de la construcción de la imagen
  • puede ejecutar rake db:create como parte del script de punto de entrada de una imagen de base de datos (algo de lo que no soy fan y no recomiendo)
  • puede excluirlo de la compilación y convertirlo en un paso manual para configurar el entorno (tampoco es un ventilador, pero es la opción más fácil, y lo que usamos en los documentos de ejemplo http://docs.docker.com/compose / rails /)
  • Haga una compilación de varios pasos que inicie un entorno temporal, que puede usar para crear un volcado SQL de los datos, e incluirlo en la imagen de la base de datos. Todavía no hay una gran herramienta para eso, pero estoy trabajando en algo en https://github.com/dnephin/buildpipe. Todavía no hay documentos para él, por lo que probablemente no quieras usarlo.

Todos 3 comentarios

Sí, los enlaces no están disponibles durante la fase de construcción. Hay algunas formas de instalar sus accesorios durante la compilación, pero ninguna de ellas es realmente sencilla:

  • puede crear un nuevo Dockerfile para la base de datos, agregar toda la fuente del proyecto y las dependencias de ruby, y ejecutar rake db:create como parte de la construcción de la imagen
  • puede ejecutar rake db:create como parte del script de punto de entrada de una imagen de base de datos (algo de lo que no soy fan y no recomiendo)
  • puede excluirlo de la compilación y convertirlo en un paso manual para configurar el entorno (tampoco es un ventilador, pero es la opción más fácil, y lo que usamos en los documentos de ejemplo http://docs.docker.com/compose / rails /)
  • Haga una compilación de varios pasos que inicie un entorno temporal, que puede usar para crear un volcado SQL de los datos, e incluirlo en la imagen de la base de datos. Todavía no hay una gran herramienta para eso, pero estoy trabajando en algo en https://github.com/dnephin/buildpipe. Todavía no hay documentos para él, por lo que probablemente no quieras usarlo.

¡Está bien, genial! : +1: Primero, ¡gracias por su larga descripción! Lo ejecutaré como un paso manual, esto debería ser suficiente por ahora. ¡Más tarde podría pensar en otros pasos!

@dazorni ¿Podría actualizar los pasos para resolverlo? Me metí en esto y trato de descubrirlo. Sé que es difícil de reproducir, pero agradezco mucho si puedes mostrar :).

¿Fue útil esta página
0 / 5 - 0 calificaciones