2017-08-07 4 views
2

Ich versuche, einen Webserver Container mit einem mysql-Server-Container verbinden, aber ich bekomme unbekannte Host, wenn ich versuche, eine Verbindung auf mysql-Server, wie die phpmyadmin.Wie kann ein Andock-Container mit einem externen MySQL-Container verknüpft werden?

Hier meine mysql Docker-compose.yml

version: '3' 
services: 
    mysqldb: 
     image: mysql 
     container_name: mysql 
     restart: always 
     env_file: 
      - ".env" 
     environment: 
      - MYSQL_DATABASE=${MYSQL_DATABASE} 
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} 
      - MYSQL_USER=${MYSQL_USER} 
      - MYSQL_PASSWORD=${MYSQL_PASSWORD} 
     ports: 
      - "3306:3306" 
     expose: 
      - "3306" 
     volumes: 
      - "./data/mysql:/var/lib/mysql" 

Und hier meine Web-Server-Container

version: '3' 
services: 
    web: 
     image: nginx:latest 
     container_name: web 
     ports: 
      - "80:80" 
      - "443:443" 
     restart: always 
     volumes: 
      - "./etc/nginx/nginx.conf:/etc/nginx/nginx.conf" 
      - "./etc/nginx/sites-enabled:/etc/nginx/sites-enabled" 
      - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf" 
      - "./etc/ssl:/etc/ssl" 
      - "./web:/var/www/html" 
      - "./data/domains:/domains" 
     depends_on: 
      - php 
     external_links: 
      - "mysql:mysql" 
    php: 
     image: nanoninja/php-fpm 
     restart: always 
     volumes: 
      - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini" 
      - "./web:/var/www/html" 
      - "./data/domains:/domains" 
    myadmin: 
     image: phpmyadmin/phpmyadmin 
     container_name: phpmyadmin 
     ports: 
      - "8080:80" 
     environment: 
      - PMA_ARBITRARY=1 
      - PMA_HOST=mysql 
     restart: always 
     external_links: 
      - "mysql:mysql" 

Habe ich Setup die Docker-compose Dateien korrekt?

Edit 1:

[email protected]:~/docker# docker ps | grep mysql 
0d49167a6aae  mysql           "docker-entrypoint..." About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp      mysql 

Antwort

2

Das Problem ist, dass Sie zwei verschiedene compose Dateien verwenden. Die external_links funktioniert nicht mehr, wenn Sie nicht beide Container im selben Netzwerk haben. Siehe unten aus Dokumentation

Wenn Sie das Dateiformat Version 2 oder höher verwenden, müssen die extern erstellten Container mit mindestens einem der gleichen Netzwerke wie der Dienst verbunden sein, der mit ihnen verknüpft ist. Ab Version 2 sind Links eine Legacy-Option. Wir empfehlen stattdessen, Netzwerke zu verwenden.

Diese Option wird ignoriert, wenn ein Stapel im Schwarmmodus mit einer Compose-Datei (Version 3) bereitgestellt wird.

Host-IP verwenden

Da Ihr mysql auf dem Host ausgeführt wird kartiert 3306 auch. In Ihrer Kompositionsdatei können Sie

extra_hosts: 
    - "mysql:<MACHINEIP>" 

hinzufügen MachineIP ist die IP Ihres Hosts. Wieder keine empfohlene Weg, es zu tun

Verwendung externer Netzwerke

docker-compose Sie Netzwerke definieren. So können Sie, dass in Ihrem mysql compose Datei definieren und dann wo es sich als ein externes Netzwerk in Ihren anderen Docker-compose und haben Zugriff auf die gleichen sein Name mit mysqldb

dieser URL finden https://docs.docker.com/compose/networking/#using-a-pre-existing-network

+0

Danke, i Ich habe nicht bemerkt, dass dieser Name derselbe sein muss, weil ich die Option container_name verwendet habe. Ich werde diese Änderungen versuchen; –

+1

Das war mein Fehler, ich habe nicht gesehen, dass du 'container_name' benutzt hast. Gib mir ein paar Minuten –

+1

Korrigiert meine Antwort –

Verwandte Themen