webentwicklung-frage-antwort-db.com.de

Die Installation von MySQL in Docker schlägt mit der Fehlermeldung "Verbindung zum lokalen MySQL-Server kann nicht über Socket hergestellt werden" fehl

Ich versuche, Mysql in einem Docker-Container zu installieren. Ich habe verschiedene Bilder von Github ausprobiert. Es scheint, als würden sie alle erfolgreich die Mysql installieren.

FEHLER 2002 (HY000): Verbindung zum lokalen MySQL-Server kann nicht über Socket '/var/run/mysqld/mysqld.sock' hergestellt werden

Systemspezifikationen:

  • Ubuntu 12,04 auf AWS
  • Docker 0.10.0

Pakete, die ich bisher ausprobiert habe:

19
Mohammad

Denken Sie daran, dass Sie eine Verbindung zum laufenden Docker-Container herstellen müssen. Daher möchten Sie wahrscheinlich TCP anstelle von Unix-Socket verwenden. Überprüfen Sie die Ausgabe des Befehls docker ps und suchen Sie nach ausgeführten MySQL-Containern. Wenn Sie einen finden, verwenden Sie den Befehl mysql wie folgt: mysql -h 127.0.0.1 -P <mysql_port> (Sie finden Port in docker ps output) ..__ Wenn Sie keinen laufenden mysql-Container in docker ps output finden, versuchen Sie docker images, um den Namen des mysql-Images zu finden, und versuchen Sie es mit einem ähnlichen Namen Um es auszuführen: docker run -d -p 3306:3306 tutum/mysql wobei "tutum/mysql" der Bildname in docker images ist.

37
odk

Ich hatte das gleiche Problem, ich hatte nämlich vergessen, den Dienst nach der Installation auszuführen.

Starten Sie den MySQL-Server: 

/etc/init.d/mysql start
14
Mega

Ich weiß nicht, wie ich das erreichen kann, aber ich kann MySQL erreichen, indem ich tippe

$ mysql -u root -h 

mywebsite:
  image: benftwc/pldev-webserver
  volumes:
    - ./mywebsite.fr/:/var/www/
  working_dir: /var/www/
  ports:
    - "8009:8009"
  command: php -S 0.0.0.0:8009
  links:
    - database
database:
  image: library/mysql
  environment:
    MYSQL_ROOT_PASSWORD: root
  ports:
    - "3310:3306

[email protected]:/# mysql -u root -h 127.0.0.1 -p3310
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

[email protected]:/# mysql -u root -h database -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g...........
11
Ben Cassinat

Wenn Sie MySQL nicht auf Ihrem Host installiert haben, müssen Sie es im Container ausführen ( https://docs.docker.com/engine/reference/commandline/exec/#/examples gibt Erklärungen zu Docker Run vs Docker Exec).

Wenn Ihr Container aktiv ist, können Sie mit docker exec yourcontainername mysql -u root -p auf den Client zugreifen.

Wenn Sie Docker Compose verwenden und eine Datenbank mit dem Namen mysql-Datenbankserver deklariert haben, können Sie Folgendes verwenden: docker-compose exec database mysql -u root -p

4
Jeremy Jumeau

Monate nach dieser Frage habe ich meine Docker-Fähigkeiten verbessert. Ich sollte stattdessen den Namen des Docker-Containers verwenden. 

Verwenden Sie dokerized-nginx als Bridge, um den IP + Port des Containers verfügbar zu machen.

In der WEB-Konfiguration verwende ich jetzt mysql://USERNAME:[email protected]_container_name/DB_NAME, um über Docker auf Mysql-Socket zuzugreifen (funktioniert auch mit Docker-Compose, Compose-Name anstelle von Container eins)

2
Ben Cassinat

Überprüfen Sie, was in Ihrer database.yml-Datei enthalten ist. Wenn Sie bereits über eine einfache Rails-App verfügen und diese einfach mit Docker umwickeln, sollten Sie Folgendes ändern (in database.yml):

socket: /var/run/mysqld/mysqld.sock #just comment it out

zu

Host: db 

dabei ist db der Name meines Datenbankdienstes von docker-compose.yml. Und hier ist mein docker-compose.yml:

version: '3'
services:
  web:
    build: .
    command: bundle exec Rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    links:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root

Sie starten Ihre App in der Konsole (im App-Ordner) als docker-compose up. Dann WAIT 1 MINUTE (lassen Sie den MySQL-Dienst vollständig laden), bis in der Konsole keine neuen Protokolle mehr angezeigt werden. Normalerweise sollte die letzte Zeile so sein 

db_1 | 2017-12-24T12: 25: 20.397174Z 0 [Hinweis] Ende der Liste von nicht nativ partitionierte Tabellen

Dann (in einem neuen Terminalfenster) anwenden:

docker-compose run web rake db:create

und dann

docker-compose run web rake db:migrate

Stoppen Sie nach Beendigung Ihrer Arbeit die geladenen Bilder mit

docker-compose stop

Verwenden Sie stattdessen nicht docker-compose down, da Sie sonst Ihren Datenbankinhalt löschen.

Wenn Sie das nächste Mal Ihre Arbeit fortsetzen möchten, wenden Sie sich an:

docker-compose start

Der Rest erledigt genau wie hier beschrieben: https://docs.docker.com/compose/Rails/

2
prograils

Ich komme vielleicht zu spät zur Antwort und wahrscheinlich weiß die Welt dies jetzt.

Alles, was Sie brauchen, um die Ports des Docker-Containers zu öffnen, um darauf zuzugreifen. Zum Beispiel beim Ausführen des Containers: 

andocklauf - Name mysql_container -e MYSQL_ROOT_PASSWORD = root -d -p 3306:3306 mysql/mysql-server: 5.7

Auf diese Weise kann der mysql Ihres Containers vom Host-Computer aus aufgerufen werden. Später können Sie sich damit verbinden.

docker exec -it mysql_container mysql -u root -p

1
Dave Ranjan

Ich bin heute auf dieselbe Ausgabe gestoßen. Versuchen Sie, mit diesem Befehl ur container auszuführen. 

docker run --name mariadbtest -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypass -d mariadb/server:10.3
0
USMAN FAZIL

Für mich ging es einfach darum, den Docker-Daemon neu zu starten.

0
ZiGiUs