El Dockerfile de mi aplicación spring-boot:
FROM openjdk:8-jdk-alpine VOLUME /tmp COPY target/media-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] application.yml
spring: datasource: url: jdbc:postgresql://localhost:5432/media username: postgres password: postgres hikari: connectionTimeout: 30000 y aquí está el docker-compose.yml :
version: '3' services: db: image: postgres ports: - "5432:5432" environment: POSTGRES_DB: media POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres app: build: context: ./ dockerfile: Dockerfile depends_on: - db ports: - "8080:8080" Ejecutar docker-compose up --build da como resultado:
aplicación_1 | org.postgresql.util.PSQLException: Conexión a 0.0.0.0:5432 rechazada. Verifique que el nombre de host y el puerto sean correctos y que el administrador de correo acepte conexiones TCP/IP. aplicación_1
Supongo que la aplicación Spring intenta conectarse a Postgres antes de que Postgres esté listo, pero obtengo el siguiente registro:
db_1 | 2019-05-18 19:05:53.692 UTC [1] REGISTRO: el sistema de base de datos está listo para aceptar conexiones
El objetivo principal de Docker Compose es hacer girar un conjunto de contenedores Docker, que luego funcionarán como entidades independientes. De forma predeterminada, todos los contenedores tendrán una conexión de red virtual con todos los demás, aunque puede cambiar eso si lo desea; obtendrá esa función, ya que no ha especificado una configuración personalizada.
Cada uno de los contenedores obtendrá una dirección IP virtual dentro de la red virtual configurada por Docker. Dado que estos son dinámicos, Docker Compose te lo pone más fácil al crear entradas DNS internas correspondientes a cada servicio. Por lo tanto, tendrá dos contenedores, que se pueden abordar como app y db respectivamente, ya sea de ellos mismos o del otro. Si tiene ping instalado, también puede hacer ping a estos nombres, ya sea a través docker-compose exec o a través de un shell creado manualmente.
Por lo tanto, como descubrimos en los comentarios, puede conectarse desde la app a jdbc:postgresql://db:5432/media , y debería funcionar.