Lancer un projet rails avec docker

116231
,

Bonjour,

Je teste Docker, docker-compose... en suivant ce guide https://docs.docker.com/compose/rails/#build-the-project

Je créé bien les différents fichier, Dockerfile, docker-compose.yml, Gemfile et Gemfile.lock.

Je lance un :

docker-compose run web rails new . --force --database=postgresql

Mais la j'ai cette erreur

ERROR: Cannot start service web: oci runtime error: container_linux.go:265: starting container process caused "exec: \"rails\": executable file not found in $PATH"

Si quelqu'un peut m'expliquer pourquoi :)

Je suppose qu'en installant Rails sur ma machine cela fonctionnerait mais le principe de docker n'est-il pas de ne pas avoir besoin d'installer des langages sur sa machine ?

Je suis sous Mac au cas ou, si jamais ca change qq chose.

Merci :)

1 Réponse

42431
,

Salut !

J'ai bien galéré moi aussi pour me faire un environement de dev sous docker, voici ma version qui me parait plutôt pas mal :)

Dockerfile

# On part d'une image ruby
FROM ruby:2.3.1

# On ajoute nodejs
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -

# On installe quelques paquets essentiels
RUN apt-get install -y build-essential libpq-dev nodejs libmysqlclient-dev

# On monte un dossier pour notre application
ENV app /app
RUN mkdir $app

# On défini l'espace de travail
WORKDIR $app

# On monte un autre volume pour stocker les gems pour plus de rapidité lors des prochains builds
ENV BUNDLE_PATH /box

#  On importe le projet
ADD . $app

# On démarre le serveur une première fois
CMD rails s -b 0.0.0.0

docker-compose.yml

version: '2'
services:
  database:
    image: mysql:5.7
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: app
      MYSQL_USER: app
      MYSQL_PASSWORD: app
  app:
    build: .
    command: ./startup.sh
    links:
      - database
    ports:
      - "3000:3000"
    user: "1000:1000"
    volumes:
      - .:/app
    volumes_from:
      - box
    environment:
      DB_NAME: app
      DB_USER: app
      DB_PASSWORD: app
      DB_HOST: database
  box:
    image: busybox
    volumes:
      - ~/.busybox:/box

Et un script de démarrage placé a la racine du projet (sans oublier de le rendre executable "chmod +x startup.sh") :
startup.sh

#!/bin/bash

# On teste l'installation des gems, on en installe si besoin
bundle check || bundle install

# Démarrage du serveur
bundle exec rails s -b 0.0.0.0

Voila, j'espère t'avoir aidé !