2016-02-19 30 views
6

Der Plankann nicht in Docker MySQL Container Tomcat Container verbinden

ich meine Tomcatbediener meiner MySQL-Server in der Lage sein verbinden wollen beide in getrennten Behältern.

Das Problem

Tomcat kann keine Verbindung zu MySQL

ich einige Details aus dem wordpress tutorial verwendet, um über eine Verbindung mit dem MySQL-Container einrichten und erstellt den Link zum MySQL.

Obwohl der Tomcat und mysql gerade gut laufen, kann ich Tomcat nicht scheinen, um sich mit MySQL verbinden zu können, die Einstellungen funktionieren auf meinem lokalen Rechner völlig in Ordnung.

Ich habe versucht, --net: "host" auch zu verwenden, obwohl das nicht mit Tomcat funktioniert, da es einen schweren Fehler wirft.

Vorherige Antworten

I noticed on this post a load möglicher Korrekturen für den Fehler, obwohl ich nicht glaube, irgendetwas davon auf mein Problem würde übersetzen, wie ich glaube, das ist ein Problem Docker kein Host ein.

Docker-compose.yml

web: 
    image: tomcat:7.0 
    container_name: tomcat-container 
    ports: 
    - "80:8080" 
    hostname: docker-tomcat 
    volumes: 
    - /home/webapps:/usr/local/tomcat/webapps 
    links: 
    - db 
db: 
    image: mysql 
    container_name: mysql-container 
    environment: 
    MYSQL_ROOT_PASSWORD: Mysqlpassword1 
    MYSQL_DATABASE: tracker 
    volumes: 
    - /home/mysqlDB:/var/lib/mysql 

Das ist mein Context.xml from tomcat.

<Context> 
    <Resource 
     name="jdbc/tracker" type="javax.sql.DataSource" 
     maxActive="100" maxIdle="30" maxWait="10000" 
     url="jdbc:mysql://localhost:3306/tracker?useSSL=false" 
     driverClassName="com.mysql.jdbc.Driver" 
     username="root" password="mysqladmin1" 
    /> 
    <Resource 
     name="jdbc/jenkins" type="javax.sql.DataSource" 
     maxActive="100" maxIdle="30" maxWait="10000" 
     url="jdbc:mysql://localhost:3306/jenkins?useSSL=false" 
     driverClassName="com.mysql.jdbc.Driver" 
     username="root" password="mysqladmin1" 
    /> 
</Context> 

Der Fehlercode.

Antwort

5

Da Sie db als "db" verknüpfen, können Sie localhost nicht verwenden, um sich Ihrer Datenbank anzuschließen. Sie sollten "db"

jdbc:mysql://db:3306/tracker?useSSL=false 

In Ihrem Container, entwerfen localhost Ihren Tomcat-Container, nicht Ihr Host. MySQL-Container hat sein eigenes Netzwerk.

Futhermore, wenn man so will "db" Namen nicht, können Sie es mit anderen Namen

Für exemple Name Link:

links: 
    - db:container-mysql 

In diesem Fall innerhalb Sie tomcat Container, könnten Sie verwenden

jdbc:mysql://container-mysql:3306/tracker?useSSL=false 
+0

Ist es die folgende Netzwerkkonfiguration auf der gleichen Einrückungsebene hinzufügen möglich etwas wie '- db: localhost' zu tun, damit ich es nicht von den Entwicklungseinstellungen zu den Aufstellungseinstellungen ändern muss? Sonst vielen Dank, ich werde es in Kürze versuchen. – jackdh

+0

Ich versuche nie, localhost zu verwenden. Ich denke, localhost ist ein Schlüsselwort. Du kannst versuchen, vielleicht funktioniert localhost, aber ich denke, du solltest nicht. – Thibaut

+0

In der Tat, ich glaube, Sie immer noch „my-mysql-Server“ in Ihrem Docker und auf Ihrem Computer, und ändern Sie auf Ihrem Computer verwenden sollen, um diesen Eintrag zu Ihrem lokalen dns (/ etc/hosts) hinzufügen – Thibaut

1

Wenn Sie einen Container verwenden bereits läuft oder laufen durch separate DockerFile verwenden, dann möchten Sie vielleicht mit

betrachten 210
external_links: 
    - mysql-container:db 

Beachten Sie, dass der Name mysql-container der Name des Containers ist.Wenn Sie den Namen nicht kennen oder nicht eine in der docker-compose.yml angegeben wird, kann man es auch, indem Sie finden

docker ps 

Die Säule mit dem NAMES derjenige ist, dass Sie in den externen Links benötigen. Die db nach : ist nur ein Alias ​​und es könnte alles sein, was Sie wollen. Es wird dein Hostname sein. Wenn Sie zum Beispiel vor dem Andocken der Datenbank Ihren Host localhost hatten, müssen Sie ihn jetzt in db ändern.

Schließlich müssen Sie auch sicher sein, sowohl der Behälter im gleichen Netzwerk laufen zu haben. Sie können ein neues Netzwerk als das tun, indem:

docker network create --driver=bridge my-network 

dann innerhalb der docker-compose.yml beider der Behälter, wie der service

networks: 
    default: 
    external: 
     name: my-network 
Verwandte Themen