docker-compose.yml
version: '3.8'
services:
db:
image: postgres
restart: always
container_name: security-db
environment:
POSTGRES_DB: security-db
POSTGRES_USER: scrty
POSTGRES_PASSWORD: scrty123
ports:
- '5050:5432'
application.properties
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc:postgresql://localhost:5050/security-db
spring.datasource.username=scrty
spring.datasource.password=scrty123
spring.jpa.hibernate.ddl-auto=update
Я пытаюсь запустить приложение Spring Boot внутри контейнера Docker, а также запускаю базу данных PostgreSQL в другом контейнере Docker. Однако мое приложение не может установить соединение с базой данных PostgreSQL.
Да, оба приложения работают на моем локальном компьютере. Версия @Raphi1: '3.8' службы: db: изображение: перезапуск postgres: всегда имя_контейнера: среда Security-DB: POSTGRES_DB: Security-DB POSTGRES_USER: scrty POSTGRES_PASSWORD: scrty123 порты: - '5050:5432'
Можете ли вы запустить приложение из IDE с заданным application.properties
, без докера?
Итак, у вашего приложения нет docker-compose.yaml
, только DOCKERFILE
?
Когда я запускаю приложение в IDE с этим docker-compose.yml, оно работает, но когда я пытаюсь запустить докер-контейнер приложения, оно не работает @Raphi1
Как запустить Docker-контейнер приложения? У вас нет docker-compose.yaml
для вашего приложения? У вас есть Dockerfile
для приложения? Вы опубликовали только docker-compose.yaml
, содержащий контейнер вашей базы данных.
это мой файл докеров. Когда я создаю из этого файла докер-контейнер и запускаю его, я получаю сообщение об ошибке. ИЗ openjdk:21 ARG JAR_FILE=target/*.jar КОПИРОВАТЬ target/BookStore-0.0.1-SNAPSHOT.jar bookstore.jar ENTRYPOINT ["java","-jar","bookstore.jar"] @Raphi1
Проблема в том, что контейнеры работают в разных сетях и поэтому не могут взаимодействовать друг с другом. Вы можете решить эту проблему, поместив свое приложение также в свой docker-compose.yaml
, поскольку docker Compose автоматически создаст сеть, и все службы присоединятся. Для этого вы можете изменить свой docker-compose.yaml
следующим образом:
Решение 1:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
image: app:latest
db:
image: postgres
restart: always
container_name: security-db
environment:
POSTGRES_DB: security-db
POSTGRES_USER: scrty
POSTGRES_PASSWORD: scrty123
ports:
- '5050:5432'
Таким образом, вам вообще не нужно раскрывать порт 5050
, если вы не хотите получать доступ к базе данных со своего хоста. В app.image
вы можете поместить все, что захотите, это имя вашего изображения, которое будет создано и помечено при выполнении docker compose up --build
. app.build.context
укажет контекст сборки докера, а app.build.dockerfile
укажет ваш Dockerfile
.
Решение 2.
Вы также можете создать сеть вручную с помощью следующей команды:
docker network create -d bridge my-bridge-network
Это создаст сеть докеров под названием my-bridge-network
. Теперь вам нужно подключить оба ваших контейнера к этой сети. Выполните следующую команду для обоих ваших контейнеров (базы данных и приложения).
docker network connect <NETWORK> <CONTAINER>
где вы заменяете <NETWORK>
на созданное вами имя сети и <CONTAINER>
на имя вашего контейнера.
Оба контейнера работают на одной машине? Можете ли вы опубликовать
docker-compose.yaml
контейнера вашего приложения?