[RUBY] Erreur rencontrée avec les notes lors du déploiement de docker sur des rails

dockerfile

FROM ruby:2.5.1
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN mkdir /myapp
ENV APP_ROOT /myapp
WORKDIR $APP_ROOT
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]

entrypoint.sh Directement sous le répertoire du projet

entrypoint.sh


#!/bin/bash
set -e

rm -f /myapp/tmp/pids/server.pid

exec "$@"

docker-compose-yml

docker-compose.yml


version: '3'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    tty: true
    stdin_open: true
    depends_on:
      - db
    ports:
      - "3000:3000"
    volumes:
      - .:/myapp:delegated
  db:
    image: mysql:5.7
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3316:3306'
    volumes:
      - ./db/mysql/volumes:/var/lib/mysql

lié à la commande docker

#Liste des conteneurs(Y compris ceux qui sont arrêtés)
$ docker ps -a

#Liste des ID de conteneur
$ docker ps -a -q

#Supprimer le conteneur
$ docker rm [ID du conteneur]

#Suppression (forcée) du conteneur
$ docker rm -f [ID du conteneur]

#Entrez dans le conteneur
$ docker-compose exec web bash

#(1) Sortie du conteneur
$ exit
 
# (2)Sortez du conteneur
Ctrl + P + Q (Sans arrêter le conteneur)

Différences entre la construction, la création, le démarrage et l'exécution de docker-compose

docker-compose build Créez uniquement l'image, pas le conteneur. Bien sûr, cela ne démarre pas le conteneur

docker-compose up S'il existe un cache d'images, créez et démarrez le conteneur à partir de là. S'il n'y a pas de cache d'image, créez l'image avec build et créez / démarrez le conteneur.

docker-compose start

Lancez des conteneurs déjà construits, le cas échéant (Arrêtez le conteneur avec docker-compose stop)

docker-compose run Exécutez la commande dans le conteneur du service spécifié par l'argument

$ docker-compose run web rails s
$ docker-compose run web rails c

etc,,,,

Site de référence pour la commande docker

https://qiita.com/tegnike/items/bcdcee0320e11a928d46 [Recherche arrière de la commande docker-compose pour les débutants](https://qiita.com/okyk/items/a374ddb3f853d1688820 #) [résumé de la commande docker-compose](https://qiita.com/wasanx25/items/d47caf37b79e855af95f#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82 % UN F #)

Si le docker est lent

[Le docker Mac sera exempt de stress lent](https://qiita.com/ysKey2/items/346c429ac8dfa0aed892 #)

docker-compose.yml


#Exemple
services:
  app:
    volumes:
      - .:/project/sample_app:delegated

Erreur rencontrée

Autoprefixer doesn’t support Node v4.8.2.

web_1  | ActionView::Template::Error (Autoprefixer doesn’t support Node v4.8.2. Update it.):
web_1  |     3:   <head>
web_1  |     4:     <title><%= content_for?(:html_title) ? yield(:html_title) : "Japanepa.com" %></title>
web_1  |     5:     <%= csrf_meta_tags %>
web_1  |     6:     <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
web_1  |     7:     <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
web_1  |     8:     <%= Gon::Base.render_data %>
web_1  |     9:     <%= include_gon %>

Autoprefixer doesn’t support Node v4.8.2. "La chose qui ajoute automatiquement les préfixes de Vender est que le Gem appelé Autoprefixer ne prend pas en charge Node v4.8.2."

1. Les mesures d'Autoprefixer ne prennent pas en charge Node v4.8.2.

Ruby on Rails - Autoprefixer doesn’t support Node v4.9.1. Update it. How to fix? Il semble que cela puisse être corrigé en insérant une gemme appelée "mini_racer"

2. Les mesures pour l'Autoprefixer ne prennent pas en charge Node v4.8.2.

Autoprefixer doesn’t support Node v4.8.2. Update it

#Changer avant
RUN apt-get update -qq \ && apt-get install -y nodejs postgresql-client

#Après le changement
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*

Your Ruby version is 2.5.8, but your Gemfile specified 2.5.1 Erreur causée par une version différente de Ruby Cependant, le gemfile et le dockerfile disaient:

source 'https://rubygems.org'
ruby '2.5.1'
FROM ruby:2.5.1

Les contre-mesures pour votre version Ruby est 2.5.8, mais votre Gemfile a spécifié 2.5.1

Quand je l'ai recherché, la seule solution était de faire correspondre les versions ruby dans Gemfile et Dockerfile. Par conséquent, prenez les contre-mesures suivantes

«Désinstallation et réinstallation du docker»

En fait, cela a résolu le problème, mais je ne peux pas le recommander de manière trop agressive.

Plus tard, en enquêtant sur divers dockers, je suppose que la cause peut être la suivante.
  1. J'avais l'habitude de lancer un conteneur avec ruby 2.5.8, donc cette image est restée.
  2. Lorsque docker-compose, au lieu d'extraire à nouveau l'image 2.5.1 décrite dans le dockerfile Une erreur s'est produite car une image Ruby 2.5.8 précédemment extraite a été utilisée.

Je ne suis pas très familier avec docker, mais si l'image ruby est extraite, sera-t-elle utilisée quelle que soit la version ruby décrite dans le Dockerfile? ??

Je n'ai pas compris la différence entre docker-compose ʻup, build et start`, donc je les ai résumés

Qu'est-ce qu'un cache? Une fois que vous avez construit Docker, un cache est créé. Comme vous le savez, Google Chrome et les autres navigateurs ont la même fonction. Si vous avez un cache, vous pouvez le traiter rapidement lorsque vous le construisez à partir de la deuxième fois.

Cependant, il y a des moments où il n'est pas pratique d'avoir un cache, comme lors de la mise à jour d'un Dockerfile. Si vous n'ajoutez pas l'option --no-cache comme présenté ci-dessus, Docker utilisera le cache pour créer l'image, vous ne verrez donc pas le Dockerfile mis à jour et vous ne pourrez pas créer une nouvelle image.

Après tout, il semble qu'une erreur de différence de version se soit produite car le cache lors du lancement du conteneur avec l'ancien ruby 2.5.8 est resté.

Si vous avez une ancienne image de rubis

Remède 1

#Docker sans utiliser le cache-compose.Extraire une nouvelle image avec la version ruby spécifiée par yml

$ docker-compose build --no-cache

Remède 2

Supprimer l'ancienne image

#Afficher une liste d'images de docker

$ docker images
> REPOSITORY          TAG                   IMAGE ID            CREATED             SIZE
> ruby                2.5.1                 3c8181e703d2        22 months ago       869MB

#Supprimer l'image en spécifiant l'ID D'IMAGE

$ docker rmi 3c8181e703d2

c'est tout

Recommended Posts

Erreur rencontrée avec les notes lors du déploiement de docker sur des rails
Erreur lors du déploiement d'EC2 avec CircleCI
Erreur de base de données concernant le déploiement à l'aide d'Heroku
Remarques sur l'utilisation de FCM avec Ruby on Rails
[Rails] Résolution d'erreur lors de la génération de jetons avec PAYJP
Présentation de Rspec avec Ruby on Rails x Docker
Libération: effectuer le déploiement donne le code d'erreur 400
Erreur lors du déploiement de rails5 + Mysql sur heroku avec Docker-compose
mémo python sur docker
Erreur lors du déploiement d'EC2
Quand je bcrypt avec node + docker, j'ai une erreur
Tutoriel Ruby on Rails Remarques gênantes lors de l'exécution sous Windows
Exécuter des rails à chaque fois dans le docker
Erreur lors de la lecture avec java
[Docker] Construction de l'environnement Rails 5.2 avec docker
Erreur lors de l'utilisation des rails capybara
[Docker] À utiliser à tout moment avec Docker + Rails
Mesures des autorisations lors de la construction de MySQL avec Docker sur WSL2
Création d'un environnement de développement pour Ruby on Rails à l'aide de Docker + VSCode (Remote Container)
WordPress avec Docker Compose sur CentOS 8
Notes de solution lorsqu'une erreur se produit lors du téléchargement de docker gpg à l'aide de curl
Rails sur la procédure de construction de l'environnement Docker
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Déployer des rails sur Docker vers heroku
Créer un environnement de débogage sur un conteneur - Créer un environnement de développement local pour les didacticiels Rails avec Docker -
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Remarques sur ce qu'il faut faire lorsque EC2 est configuré avec t2.micro
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
Lors de la création d'un environnement rails6 sur Ubuntu, il est bloqué avec l'installation du bundle
[Ruby on Rails] Erreur qui n'a pas pu trouver l'utilisateur avec ... après la déconnexion
[Ruby on Rails] Afficher le test avec RSpec
Construction de Rails 6 et environnement PostgreSQL avec Docker
Construire un environnement Rails 6 + MySQL avec Docker compose
Déployer sur heroku avec Docker (Rails 6, MySQL)
Essayez de déployer l'application Rails sur EC2-Part 1-
Grattage avec marionnettiste à Nuxt sur Docker.
Erreur lors de la création de l'infrastructure avec l'application AWS
[Ruby on Rails] Test du contrôleur avec RSpec
Image volée lors de la mise à jour de Docker avec WSL2
[Ruby on Rails] Test de modèle avec RSpec
Créer un environnement avec Docker sur AWS
Faisons un écran d'erreur avec Rails
Exécutez Ubuntu + ROS avec Docker sur Mac
Comment créer un environnement Rails 6 avec Docker
Traitement de NameError: constante non initialisée :: Erreur analysable lors de l'installation d'Active Storage dans Rails6
[Laravel] Comment gérer une erreur de mémoire insuffisante lorsque le compositeur a besoin de [Docker]
[Résolution d'erreur] Se produit lors de la tentative de création d'un environnement pour le printemps avec docker