web-dev-qa-db-fra.com

Docker compose run yarn install

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
4
jj-aa

Crée d'abord une image en fonction de Dockerfile:

  1. Obtenez une image Ruby:2.5 pour en créer une nouvelle image
  2. Installer toutes les dépendances
  3. Créer le dossier /app
  4. Copiez tous les fichiers de votre système (répertoire du projet) dans l'image de /app chemin
  5. Installez yarn 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

  1. Exécutez votre code directement à partir du conteneur (comme vous l'avez fait dans Dockerfile)
  2. ou Ne copiez pas le code source dans le conteneur et montez le code en tant que volume (comme vous l'avez fait dans docker-compose.yml), et exécutez 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.

7
Taron Saribekyan