Lors de l'exécution de l'étape RUN yarn install dans un Dockerfile pendant la commande de construction docker-compose, j'obtiens:
[1/4] Résolution des packages ... [2/4] Récupération des packages ... info [email protected]: La plateforme "linux" est incompatible avec ce module. info "[email protected]" est une dépendance facultative et la vérification de compatibilité a échoué. L'exclure de l'installation. [3/4] Liaison des dépendances ... avertissement "@ Rails/webpacker> [email protected]" a une dépendance de pair non satisfaite "caniuse-lite@^1.0.30000697". l'avertissement "> [email protected]" a une dépendance de pair non satisfaite "webpack@^2.2.0 || ^ 3.0.0". l'avertissement "webpack-dev-server> [email protected]" a une dépendance de pair non satisfaite "webpack@^1.0.0 || ^ 2.0.0 || ^ 3.0.0". [4/4] Création de nouveaux packages ...
mais le dossier node_modules n'est PAS créé. D'un autre côté quand je cours
docker-compose run SERVICE_NAME yarn install
Je reçois:
[1/4] Résolution des packages ... [2/4] Récupération des packages ... info [email protected]: La plateforme "linux" est incompatible avec ce module. info "[email protected]" est une dépendance facultative et la vérification de compatibilité a échoué. L'exclure de l'installation. [3/4] Liaison des dépendances ... avertissement "@ Rails/webpacker> [email protected]" a une dépendance de pair non satisfaite "caniuse-lite@^1.0.30000697". l'avertissement "> [email protected]" a une dépendance de pair non satisfaite "webpack@^2.2.0 || ^ 3.0.0". l'avertissement "webpack-dev-server> [email protected]" a une dépendance de pair non satisfaite "webpack@^1.0.0 || ^ 2.0.0 || ^ 3.0.0". [4/4] Création de nouveaux packages ...
mais ensuite le dossier node_modules IT IS créé dans le dossier du projet.
Je ne comprends tout simplement pas pourquoi ... J'attends la même fonctionnalité mais il me manque quelque chose.
Voici mon service docker-compose
services:
Ruby:
build:
context: .
dockerfile: docker/Ruby/Dockerfile
networks:
- some-network
volumes:
- .:/app
ports:
- "3000:3000"
depends_on:
- mysql
command: bundle exec Rails s -p 3000 -b '0.0.0.0'
Dockerfile
FROM Ruby:2.5
# Install dependencies:
# - build-essential: To ensure certain gems can be compiled
# - nodejs: Compile assets
# - npm: Install node modules
# - yarn: Install & manage node modules [should make npm obsolete]
# - libpq-dev
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && \
apt-get install -qq -y build-essential nodejs yarn \
libpq-dev \
mysql-client
RUN mkdir /app
COPY . /app
WORKDIR /app
# install node dependencies
RUN yarn install
RUN bundle install
Crée d'abord une image en fonction de Dockerfile:
Ruby:2.5
pour en créer une nouvelle image/app
/app
cheminyarn
et bundle
(méthodes d'appel dans l'image)Et après cela "monte" votre dossier de projets sur l'image de /app
dossier, il devient donc le même que votre dossier racine système. Après cela, "génère" le conteneur et exécute la commande CMD
à partir du fichier Docker (s'il existe).
Prenez un compte qui ce n'est pas une explication détaillée du flux de génération d'image/conteneur , mais j'espère que cela peut vous aider à résoudre votre problème. Afin que vous puissiez
yarn install
dans votre système ou créez un script de point d'entrée avec les commandes d'installation: entrypoint: ./entrypoint.sh
EXEMPLE DE FICHIERS
Si vous souhaitez mettre à jour vos fichiers source "à la volée" (pour voir les mises à jour sans reconstruire le conteneur), vous devez utiliser la deuxième méthode.
Créez le fichier run.sh dans votre répertoire de projet:
run.sh
#!/bin/sh
echo '--- run yarn install'
yarn install
echo '--- run bundle install'
bundle install
# HERE YOU CAN RUN ANY OTHER SCRIPT BEFORE CONTAINER BUILDING
echo '--- create docker image and up it'
Sudo docker-compose up -d --build
docker-compose.yml
Pas besoin de changer (gardez comme dans votre question).
Dockerfile
FROM Ruby:2.5
# Install dependencies:
# - build-essential: To ensure certain gems can be compiled
# - nodejs: Compile assets
# - npm: Install node modules
# - yarn: Install & manage node modules [should make npm obsolete]
# - libpq-dev
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && \
apt-get install -qq -y build-essential nodejs yarn \
libpq-dev \
mysql-client
WORKDIR /app
Pour construire et monter un conteneur il suffit d'exécuter la commande: sh run.sh
Il installera les dépendances de noeud dans votre système, après cela créera un conteneur, qui /app
dossier sera votre dossier de projet (dans votre système), donc vos modifications de code prendront effet immédiatement.