2017-02-10 4 views
0

Neu bei Docker und ich verwende laradock, um meine Umgebung mit einem Craft CMS Projekt einzurichten. Ich bin in der Lage, es zu installieren und einzurichten, aber ich habe ein Problem beim Versuch, eine Verbindung zu dem MySQL-Container, den Laradock erstellt aus der Datei docker-compose.yml.Falsche Anmeldeinformationen beim Verbinden mit Docker MySQL-Container

Hier ist der db-bezogene Teil in meinem docker-compose.yml

mysql: 
    build: 
     context: ./mysql 
     args: 
      - MYSQL_DATABASE=homestead 
      - MYSQL_USER=homestead 
      - MYSQL_PASSWORD=secret 
      - MYSQL_ROOT_PASSWORD=root 
    volumes: 
     - mysql:/var/lib/mysql 
    ports: 
     - "3306:3306" 

Innerhalb meiner craft/config/db.php Datei, ich habe die folgenden Einstellungen:

return array(  
    '.dev' => array(
    'tablePrefix' => 'craft', 
    'server' => 'mysql', 
    'database' => 'homestead', 
    'user' => 'homestead', 
    'password' => 'secret', 
), 
); 

Aber ich bin immer ein Craft can’t connect to the database with the credentials in craft/config/db.php Fehler.

Meine Frage ist - wenn Docker den MySQL-Container erstellt, nehme ich an, dass es die Anmeldeinformationen in der docker-compose.yml-Datei verwendet, um den Zugriff auf diese Datenbank zu erstellen und zuzulassen. Wenn ja, solange mein Container läuft und meine Zugangsdaten aus meiner db.php Datei mit den Zugangsdaten in der docker-compose.yml Datei übereinstimmen, sollte es keine Verbindung herstellen?

Wenn ich die Anmeldeinformationen im MySQL-Container aktualisieren möchte, kann ich einfach die Werte in beiden Dateien aktualisieren und docker-compose up -d mysql ausführen?

Danke!

+0

Sie vermissen weiterhin den Datenbankhost in der Konfiguration. Sie können: - Datenbankdienst mit Ihrem App-Dienst verknüpfen und den Datenbankdienstnamen als Hostnamen (in Ihrem Fall 'mysql') in 'craft/config/db.php' verwenden - Docker-Brückenadresse als Datenbank-Host festlegen und den Port verwenden, der dem Host zugeordnet ist (Abschnitt Ports). –

Antwort

0

Ich habe in Art von ähnlichen Problem kürzlich ausgeführt, weil die Container in einer "zufälligen" Reihenfolge gestartet wurden. Vielleicht ist dies auch Ihr Problem, ich weiß es nicht genau.

In einem kurzen das ist mein Fall: - zwei Container php-fpm und mysql. - Running docker-compose up -d --build --no-cache alles aber php-fpm bauen fertig zuerst so bis dahin mysql für get-Service ein paar Sachen tat bereit - php-fpm Anwendung nicht auf MySQL-Server herstellen konnte, weil nicht

Die Lösung, die die neue Docker Compose Version verwenden bereit war, und verwenden Sie 2.1 auf der docker-compose.yml. Hier ist mein Arbeitsbeispiel:

version: '2.1' 
services: 
    php-fpm: 
     build: 
      context: docker/php-fpm 
     depends_on: 
      db: 
       condition: service_healthy 
    db: 
     image: mariadb 
     healthcheck: 
      test: "exit 0" 
     environment: 
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} 
      MYSQL_DATABASE: ${MYSQL_DATABASE} 
      MYSQL_USER: ${MYSQL_USER} 
      MYSQL_PASSWORD: ${MYSQL_PASSWORD} 

Der Trick: depends_on (check here) und condition (siehe Beispiel).

+0

Tut mir leid, dass ich mich darum kümmern muss, aber der Code oben zeigt genau, worüber ich nicht sicher bin: Warum sehen wir zum Beispiel MYSQL_ROOT_PASSWORD: $ {MYSQL_ROOT_PASSWORD} in der docker-compose.yml-Datei? Wo wird dieses $ {MYSQL_ROOT_PASSWORD} gespeichert? Es scheint, dass einige Leute das Passwort in dieser Datei gespeichert haben. Oder bezieht es sich auf die .env-Datei? Danke vielmals! – nadir

+0

@nadir In diesem Fall spreche ich über das Speichern des Passworts in der '.env' Datei, aber es gibt bessere Strategien da draußen ist dies der einfache – ReynierPM

+0

Vielen Dank für Ihre Antwort ReynierPM. Nebenbei habe ich die Lösung gefunden. Also für jede Person, die die gleiche Frage auf PhpMyAdmin über Laradock stellt: host = mysql/user = root/password = root – nadir

Verwandte Themen