Lancer un projet rails avec docker

Par jean-smaug, il y a 8 ans


Outils Linux

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

keilo, il y a 8 ans

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é !