2016-08-21 4 views
4

ich einen Docker-Container mit dem folgenden Befehl gestartet habeDocker-compose + externe Behälter

docker run --name mysql --restart always -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7.14 

und dann möchte eine Wordpress-Seite mit der folgenden Docker-compose.yml Datei

version: '2' 

services: 
    wordpress: 
     image: wordpress 
     external_links: 
      - mysql:mysql 
     ports: 
      - 80:80 
    environment: 
     WORDPRESS_DB_USER: root 
     WORDPRESS_DB_PASSWORD: password 
    volumes: 
     - /var/www/somesite.com:/var/www/html 
verbinden

Aber ich halte

Starting somesitecom_wordpress_1 
Attaching to somesitecom_wordpress_1 
wordpress_1 | 
wordpress_1 | Warning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 19 
wordpress_1 | 
wordpress_1 | MySQL Connection Error: (2002) Connection refused 

Es wird folgende Fehler immer scheint, wie die external_links funktioniert nicht.

Irgendeine Idee, was ich falsch mache?

Antwort

11

Ihr Link funktioniert, aber Sie befinden sich in separaten Netzwerken innerhalb von Docker. Von der docker-compose.yml docs:

Note: If you’re using the version 2 file format, the externally-created containers must be connected to at least one of the same networks as the service which is linking to them.

Um dies zu lösen, können Sie Ihr eigenes Netzwerk erstellen:

docker network create dbnet 
docker network connect dbnet mysql 

Dann konfigurieren Sie Ihre Docker-compose.yml mit:

version: '2' 

networks: 
    dbnet: 
    external: 
     name: dbnet 

services: 
    wordpress: 
     image: wordpress 
     ports: 
      - 80:80 
     environment: 
      WORDPRESS_DB_USER: root 
      WORDPRESS_DB_PASSWORD: password 
     volumes: 
      - /var/www/somesite.com:/var/www/html 
     networks: 
      - dbnet 

Hinweis mit den aktuellen Versionen von Docker, sollten Sie die Container nicht verknüpfen müssen, sollte der DNS-Dienst die Namensauflösung für Sie tun.

+0

Awesome, dass das Problem löst, gibt es eine Möglichkeit, mit einem bestimmten Benutzer und Passwort und Verbindung zu umgehen. Ich bekomme den folgenden Fehler 'MySQL Connection Error: (1045) Zugriff verweigert für Benutzer' someuser'@'somesitecom_wordpress_1.db-network '(mit Passwort: YES) 'Ich würde im Idealfall vermeiden, eine Verbindung mit root herzustellen. – sbarow

+0

Das ist alles mysql-Konfiguration, die außerhalb meiner Spezialität ist. Die [mysql-Seite auf dem Docker-Hub] (https://hub.docker.com/_/mysql/) beschreibt die verschiedenen env-Variablen, die zum Einrichten von Logins verwendet werden. Die meisten Methoden, die Sie außerhalb von Docker für Benutzeranmeldungen auf mysql einrichten können, gelten auch innerhalb des Containers. – BMitch