[RAILS] docker + mysql ne peut pas se connecter / Impossible de se connecter au serveur MySQL local via socket'var / run / mysqld / mysqld.sock '(2)

Aperçu

Je suis en train de créer un portfolio. J'ai trébuché en accédant à mysql, donc je vais l'écrire en incluant la signification du mémorandum. Je serais heureux s'il est livré aux débutants qui ont trébuché au même endroit.

Flux si loin

Can't connect to local MySQL server through socket 'var/run/mysqld/mysqld.sock' (2)

Solution

① Définissez l'utilisateur et le mot de passe dans docker-compose.yml ② Définissez le même utilisateur et mot de passe dans database.yml

Flux pour atteindre la cause

Après être entré dans le conteneur db avec $ docker exec -it <containerID> / bin / bash Après avoir exécuté $ mysql -u root, j'ai entré mysql sans aucun problème. Il n'y avait donc aucun problème avec le serveur lui-même. Je pense qu'il y a un problème avec les paramètres utilisateur, alors ajoutez l'utilisateur et le mot de passe à docker-compose.yml et database.yml

Après cela, je l'ai accédé à http: // localhost: port /, mais j'ai eu l'erreur suivante. Access denied for user 'root'@'172.18.0.5' (using password: YES) Quand j'ai fait docker-compose up auparavant, il semblait qu'il y avait un cache dans le volume, alors j'ai supprimé le volume. Après avoir refait docker-compose up, je l'ai mis sans aucun problème.

Divers fichiers

database.yml


# MySQL. Versions 5.5.8 and up are supported.
#
# Install the MySQL driver
#   gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'
#
# And be sure to use new-style password hashing:
#   https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db

development:
  <<: *default

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default

# As with config/credentials.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password as a unix environment variable when you boot
# the app. Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full rundown on how to provide these environment variables in a
# production deployment.
#
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>
#
production:
  <<: *default

docker-compose.yml



version: "3"

#Créer des conteneurs de base de données et de backend
services:
  db:
    container_name: db
    #Extraire l'image téléchargée sur Docker Hub
    image: mysql:5.7.30
    #Paramètres des variables d'environnement
    environment: 
      TZ: Asia/Tokyo #Définir TimeZone ainsi que Dockerfile
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: password
    #Spécifiez le chemin du fichier de configuration à monter
    volumes:
      - mysql_data:/var/lib/mysql
    #Définir le port
    ports:
      - 3316:3306
    #Définir l'adresse IP
    networks:
      app_net: #App ci-dessous_Configuré pour utiliser les adresses IP suivantes dans l'espace réseau net
        ipv4_address: '172.20.0.2'

  backend:
    container_name: backend
    #Exécutez ComposeFile et spécifiez le chemin lorsqu'il est construit
    build: ./backend/
    image: backend
    #Exécutez gem pour démarrer le serveur, 0.0.0.Lier à 0 pour un accès complet
    command: bundle exec rails server -b 0.0.0.0
    #Démarrez toujours le conteneur
    tty: true
    #Lancer l'exécution du menu fixe de l'interface d'entrée-synonyme de ça
    stdin_open: true
    
    #Le backend est le cache, temp, log,Monter sur git
    volumes:
      - ./backend:/app:cached
      - bundle_data:/usr/local/bundle:cached
      - /app/vendor
      - /app/tmp
      - /app/log
      - /app/.git
    environment:
      TZ: Asia/Tokyo
    
    #Contrôle de l'ordre de démarrage,Après db
    depends_on:
      - db
    ports:
      - 5000:3000 #Port avant
    networks:
      app_net:
        ipv4_address: '172.20.0.3'


#Configurez votre propre réseau
networks:
  #app_Définissez un espace réseau appelé net
  app_net:
    driver: bridge #pont Se connecter au réseau
    ipam: #Paramètres IP
      driver: default
      config:
        - subnet: 172.20.0.0/24 #Définir le sous-réseau

#Définissez deux volumes
volumes:
  mysql_data:
  bundle_data:

Recommended Posts

docker + mysql ne peut pas se connecter / Impossible de se connecter au serveur MySQL local via socket'var / run / mysqld / mysqld.sock '(2)
Impossible de se connecter au serveur MySQL local via l'erreur socket '/ tmp / mysql.sock' (2)
Impossible de se connecter au serveur MySQL local via la solution de contournement d'erreur socket '/ tmp / mysql.sock' (2)
Impossible de se connecter au serveur MySQL local via le socket '/ var / lib / mysql / mysql.sock' (2) jusqu'à la résolution.
ERREUR 2002 (HY000) lors du démarrage de MySQL: impossible de se connecter au serveur MySQL local via le socket '/ tmp / mysql.sock' (2)
[Java] [SQL Server] Se connecter à SQL Server 2017 local à l'aide de JDBC pour SQL Server
Pour se connecter de Spring à MySQL sur un serveur virtuel (non résolu)
[Java] Connectez-vous à MySQL
Connectez-vous à AWS RDS depuis l'environnement Docker sur votre PC local
Connectez-vous à MySQL 8 avec Java
[Android] Connectez-vous à MySQL (non terminé)