[RAILS] Docker + MySQL kann keine Verbindung zum lokalen MySQL-Server über Socket'var / run / mysqld / mysqld.sock 'herstellen (2)

Überblick

Ich bin gerade dabei, ein Portfolio zu erstellen. Ich bin beim Zugriff auf MySQL gestolpert, daher werde ich es einschließlich der Bedeutung des Memorandums schreiben. Ich würde mich freuen, wenn es Anfängern geliefert wird, die am selben Ort gestolpert sind.

Fließe so weit

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

Lösung

① Legen Sie Benutzer und Kennwort in docker-compose.yml fest ② Legen Sie denselben Benutzer und dasselbe Kennwort in database.yml fest

Flow, um die Ursache zu erreichen

Nach dem Eingeben des Datenbankcontainers mit $ docker exec -it <containerID> / bin / bash Nachdem ich $ mysql -u root ausgeführt hatte, gab ich ohne Probleme mysql ein. Es gab also kein Problem mit dem Server selbst. Ich denke, es gibt ein Problem mit den Benutzereinstellungen, also fügen Sie den Benutzer und das Kennwort zu docker-compose.yml und database.yml hinzu

Danach habe ich unter http: // localhost: port / darauf zugegriffen, aber ich habe den folgenden Fehler erhalten. Access denied for user 'root'@'172.18.0.5' (using password: YES) Als ich zuvor "Docker-Compose Up" gemacht habe, schien es, dass noch ein Cache im Volume vorhanden war, also habe ich das Volume gelöscht. Nachdem ich wieder "Docker-Compose Up" gemacht habe, habe ich es ohne Probleme eingefügt.

Verschiedene Dateien

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"

#Erstellen Sie Datenbank- und Backend-Container
services:
  db:
    container_name: db
    #Ziehen Sie das auf Docker Hub hochgeladene Bild
    image: mysql:5.7.30
    #Einstellungen für Umgebungsvariablen
    environment: 
      TZ: Asia/Tokyo #Stellen Sie TimeZone und Dockerfile ein
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: password
    #Geben Sie den Pfad der Konfigurationsdatei an, die gemountet werden soll
    volumes:
      - mysql_data:/var/lib/mysql
    #Port einstellen
    ports:
      - 3316:3306
    #Stellen Sie die IP-Adresse ein
    networks:
      app_net: #App unten beschrieben_Stellen Sie die folgenden IPs im Netznetzwerkbereich ein
        ipv4_address: '172.20.0.2'

  backend:
    container_name: backend
    #Führen Sie ComposeFile aus und geben Sie den Pfad an, wenn er erstellt wird
    build: ./backend/
    image: backend
    #Führen Sie gem aus, um den Server zu starten, 0.0.0.Für vollen Zugriff an 0 binden
    command: bundle exec rails server -b 0.0.0.0
    #Starten Sie immer den Behälter
    tty: true
    #Starten Sie den Docker-Lauf für die Eingabeschnittstelle-gleichbedeutend damit
    stdin_open: true
    
    #Backend ist Cache, temp, log,Auf Git montieren
    volumes:
      - ./backend:/app:cached
      - bundle_data:/usr/local/bundle:cached
      - /app/vendor
      - /app/tmp
      - /app/log
      - /app/.git
    environment:
      TZ: Asia/Tokyo
    
    #Startreihenfolge steuern,Nach db
    depends_on:
      - db
    ports:
      - 5000:3000 #Anschlussweiterleitung
    networks:
      app_net:
        ipv4_address: '172.20.0.3'


#Richten Sie Ihr eigenes Netzwerk ein
networks:
  #app_Definieren Sie einen Netzwerkbereich namens net
  app_net:
    driver: bridge #Bridge Verbindung zum Netzwerk herstellen
    ipam: #IP-Einstellungen
      driver: default
      config:
        - subnet: 172.20.0.0/24 #Subnetz definieren

#Definieren Sie zwei Volumes
volumes:
  mysql_data:
  bundle_data:

Recommended Posts

Docker + MySQL kann keine Verbindung zum lokalen MySQL-Server über Socket'var / run / mysqld / mysqld.sock 'herstellen (2)
Es kann keine Verbindung zum lokalen MySQL-Server über den Fehler "/ tmp / mysql.sock" (2) hergestellt werden
Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/ tmp / mysql.sock' (2) hergestellt werden
Bis zur Auflösung kann keine Verbindung zum lokalen MySQL-Server über den Socket '/ var / lib / mysql / mysql.sock' (2) hergestellt werden.
FEHLER 2002 (HY000) beim Starten von MySQL: Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/ tmp / mysql.sock' (2) hergestellt werden.
[Java] [SQL Server] Stellen Sie mit JDBC für SQL Server eine Verbindung zum lokalen SQL Server 2017 her
So stellen Sie auf einem virtuellen Server eine Verbindung von Spring zu MySQL her (ungelöst)
[Java] Stellen Sie eine Verbindung zu MySQL her
Stellen Sie über die Docker-Umgebung auf Ihrem lokalen PC eine Verbindung zu AWS RDS her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
[Android] Verbindung zu MySQL herstellen (unvollendet)