Ich habe eine Java Spring Boot App, die mit einer Postgres-Datenbank funktioniert. Ich möchte Docker für beide verwenden. Ich habe zunächst nur das Postgres in Docker, und ich hatte eine docker-compose.yml
Datei wie folgt definiert:Docker Compose + Spring Boot + Postgres Verbindung
version: '2'
services:
db:
container_name: sample_db
image: postgres:9.5
volumes:
- sample_db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=sample
- POSTGRES_USER=sample
- POSTGRES_DB=sample
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- 5432:5432
volumes:
sample_db: {}
Dann, als ich die Befehle ausgegeben sudo dockerd
und sudo docker-compose -f docker-compose.yml up
, es begann die Datenbank. Ich könnte zum Beispiel unter Verwendung pgAdmin
verbinden, indem Sie localhost
als Server und Port 5432
verwenden. Dann habe ich in meiner Spring Boot App innerhalb der Datei application.properties
die folgenden Eigenschaften definiert.
An diesem Punkt konnte ich meine Spring Boot App lokal durch Spring Suite laufen lassen, und alles lief gut. Dann wollte ich auch meine Spring Boot App als Docker Image hinzufügen. Ich zunächst einmal erstellt ein Dockerfile in meinem Projektverzeichnis, das wie folgt aussieht:
FROM java:8
EXPOSE 8080
ADD /target/manager.jar manager.jar
ENTRYPOINT ["java","-jar","manager.jar"]
Dann habe ich in das Verzeichnis des Projekts eingegeben mvn clean
von mvn install
gefolgt ausgegeben. Als nächstes ausgegeben docker build -f Dockerfile -t manager .
gefolgt von docker tag 9c6b1e3f1d5e myuser/manager:latest
(die ID ist korrekt). Schließlich bearbeitete ich meine vorhandenen docker-compose.yml
Datei wie folgt aussehen:
version: '2'
services:
web:
image: myuser/manager:latest
ports:
- 8080:8080
depends_on:
- db
db:
container_name: sample_db
image: postgres:9.5
volumes:
- sample_db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=sample
- POSTGRES_USER=sample
- POSTGRES_DB=sample
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- 5432:5432
volumes:
sample_db: {}
Aber jetzt, wenn ich sudo docker-compose -f docker-compose.yml up
Befehl ausgeben, wieder die Datenbank korrekt gestartet wird, aber ich bekomme Fehler und Exit-Code 1 für die Web-App Teil. Das Problem ist die Verbindungszeichenfolge. Ich glaube, ich muss es zu etwas anderem ändern, aber ich weiß nicht, was es sein sollte. Ich bekomme folgende Fehlermeldung:
web_1 | 2017-06-27 22:11:54.418 ERROR 1 --- [ main] o.a.tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool.
web_1 |
web_1 | org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections
Irgendwelche Ideen?
Danke, es funktioniert gut. – typos
Gern geschehen! – Robert