2016-02-19 13 views
6

PlanNie można połączyć pojemnik MySQL do kontenera Tomcat w dokowanym

chcę mój serwer Tomcat, aby móc połączyć się z serwerem MySQL, zarówno w oddzielnych pojemnikach.

Problem

Tomcat nie może połączyć się z MySQL

Kiedyś niektóre szczegóły z wordpress tutorial o utworzenie powiązania z pojemnika mysql i stworzył link do MySQL.

Mimo, że tomcat i mysql są w porządku, nie mogę uzyskać tomcat, aby móc połączyć się z MySQL, ustawienia działają na mojej lokalnej maszynie doskonale.

Próbowałem również użyć --net: "host", chociaż to nie działa z Tomcat, ponieważ powoduje poważne błędy.

poprzednich odpowiedzi

I noticed on this post a load możliwych poprawek do błędu, choć nie wierzę, że każdy z nich przekłada się na mój problem, jak wierzę, jest to nie problem, doker gospodarzem jeden.

doker-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 

To mój 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> 

Kod błędu.

Odpowiedz

5

Ponieważ łączysz db jako "db", nie możesz użyć localhost do przyłączenia się do bazy danych. powinieneś "db"

W swoim kontenerze, localhost zaprojektować pojemnik tomcat, a nie hosta. Kontener MySQL ma własną sieć.

Futhermore, jeśli nie lubisz "db" nazwa, można nazwać go połączyć z inną nazwą

Dla exemple:

links: 
    - db:container-mysql 

W tym przypadku, w tobie tomcat pojemnik, można używać

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

Czy to możliwe, zrobić coś takiego jak '- db: localhost', więc nie muszę zmieniać go z ustawień programistycznych na ustawienia wdrażania? W przeciwnym razie bardzo dziękuję, spróbuję go krótko. – jackdh

+0

Nigdy nie próbuję używać localhost. Myślę, że localhost jest słowem kluczowym. Możesz spróbować, może być localhost, ale myślę, że nie powinieneś. – Thibaut

+0

W rzeczywistości, myślę, że powinieneś nadal używać "my-mysql-server" w twoim oknie dokowanym i na komputerze i zmieniać na swoim komputerze, aby dodać ten wpis do lokalnego dns (/ etc/hosts). – Thibaut

1

Jeśli używasz pojemnik już uruchomiony lub uruchomić za pomocą oddzielnego DockerFile, to może warto rozważyć użycie

external_links: 
    - mysql-container:db 

Pamiętaj, że nazwa mysql-container jest nazwą Twojego kontenera.Jeśli nie znasz nazwy lub nie określono jeden w docker-compose.yml można również znaleźć go uruchamiając

docker ps 

Kolumna z NAMES jest jeden trzeba w linkach zewnętrznych. db po : to tylko alias i może to być wszystko, co chcesz. To będzie twoja nazwa hosta. Na przykład, jeśli przed dokowaniem bazy danych twój host był localhost, musisz teraz zmienić go na db.

Należy również upewnić się, że oba kontenery działają w tej samej sieci. Można to zrobić poprzez stworzenie nowej sieci jak:

docker network create --driver=bridge my-network 

Następnie wewnątrz docker-compose.yml obu pojemników, dodać następującej konfiguracji sieci na tym samym poziomie wcięcia, jako że od service

networks: 
    default: 
    external: 
     name: my-network 
Powiązane problemy