Приложение Springboot в контейнере Docker не может общаться с базой данных уже в другом контейнереMySql

Форум по Mysql
Ответить Пред. темаСлед. тема
Гость
 Приложение Springboot в контейнере Docker не может общаться с базой данных уже в другом контейнере

Сообщение Гость »

Я прошу прощения за этот вопрос перед фронта. Я новичок в Docker и постепенно пытался изучить его. Я посмотрел на многие другие вопросы, чтобы увидеть, смогу ли я на самом деле опубликовать это, или мой вопрос уже ответил. После прочтения предыдущих вопросов я все еще смущен приложением Docker Containerized Spring Boot, которое не может подключаться к базе данных в другом контейнере. Итак, я добавлю в некоторые из комментариев, которые я видел, и вы можете исправить меня в моей ошибке информации, которую я видел. Несколько месяцев назад я установил Docker и создал MySQL8: последний контейнер с последнего изображения DockerHub. Он работает, но я могу остановить это в любое время. Я не помню, как точная команда была запустить ее, но, вероятно, это было по умолчанию из инструкций от Dockerhub: https://hub.docker.com/_/mysql
Теперь это работает, и я могу остановить его и попытаться перезагрузить его с новыми командами. Я не хочу удалять изображение, которое у меня есть, и я не хочу избавляться от контейнера, который у меня есть. У него есть несколько баз данных для личных проектов и некоторые данные, которые я хочу. Я бы не хотел сделать резервное копирование нескольких баз данных, хотя я мог бы, если бы мне придется, я просто предпочитаю этого не делать. Эта база данных (MySQL) была настроена на порту 3306.src/main/resources/application.properties
spring.datasource.url=jdbc:mysql://mysql-db:3306/my_db?serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=myuser
spring.datasource.password=password
< /code>
В «url» значение «mysql-db»-это имя контейнера, так как я вижу, что это не может быть «локально». Я понимаю, что каждый контейнер Docker - это собственная виртуальная машина, и Localhost не будет работать, поэтому я понимаю. Теперь Springboot строит нормально, потому что я скопировал файл приложения.src/test/resources/application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/my_db?serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=myuser
spring.datasource.password=password
< /code>
Из -за этого все мои тесты на Junit по базе данных работают отлично. Теперь проблема возникает, когда я строю, развертываю и изображает в новом контейнере Docker. Я хочу использовать существующий контейнер, и мне нужно выяснить, как это сделать, и это то, что я искал. Итак, позвольте мне начать с показа Dockerfile, и вы можете сказать мне, если что -то не так: < /p>
FROM openjdk:23
ARG JAR_FILE=target/*.jar
COPY ./target/htmx-demo-0.0.1-SNAPSHOT.jar htmx-demo-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","htmx-demo-0.0.1-SNAPSHOT.jar"]
< /code>
У меня нет команды запуска, потому что у нее были проблемы, поэтому я удалил ее. Я не знаю, нужен ли мне это, но сейчас это работает. Пожалуйста, дайте мне знать, если есть что -нибудь еще нужно. Далее следует файл compose.yml, который я использую, и позвольте мне разместить его здесь. < /P>
services:
mysql:
container_name: mysql-db /* already exists */
image: mysql
environment:
MYSQL_DATABASE: phonebook_db
MYSQL_USER: operator
MYSQL_PASSWORD: passw0rd
MYSQL_ROOT_PASSWORD: passw0rd
ports:
- "3306:3306"
volumes:
- ./sql:/docker-entrypoint-initdb.d
networks:
- my_network

htmx-demo-app:
build: .
ports:
- "8080:80"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql-db:3306/phonebook_db?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&createDatabaseIfNotExist=true
SPRING_DATASOURCE_USERNAME: operator
networks:
- my_network

networks:
my_network:
driver: bridge
< /code>
Итак, позвольте мне распаковать этот файл compose.yml: < /p>
  • Я понимаю, что compose.yml - это оркестровая. Если приложению нужно сначала запустить, то сначала эти вещи настроены. Итак, первая служба - база данных MySQL. Мне это не нужно, чтобы создать новый контейнер для MySQL, когда он уже существует. Я уже знаю, что база данных работает, без сомнения. Я могу подключиться к нему с помощью Workbench. Я предположил, что если бы существовал контейнер, он сказал бы, он уже существует, а не создаст новый контейнер. Как это так, когда я запускаю команду Spring Boot Run, то я получаю сообщение об ошибке, что контейнер уже существует. У них была база данных MySQL, загруженная с помощью данных, и она была в собственном контейнере, когда вы посмотрели на файл compose.yml, MySQL не был в файле compose.yml, поэтому он не будет пытаться создать новый. Это то, что я, вероятно, исправим. Порты правы, и мы используем сеть. Я предполагаю, что если этой сети не существует, то она создается. Поскольку я читал другие ответы, было сказано, что у Docker уже есть сеть «по умолчанию», и если все контейнеры находятся на одной физической машине, как и у меня, то я подумал, что это решает проблему. Опять же, «MySQL-DB»-это имя контейнера, а не «LocalHost». Однако, когда изображение для приложения создается и развернуто в Docker, мы обнаруживаем, что абсолютно не можем найти MySQL-DB, так что я не знаю, почему? Это очень фрагментарное. Я предполагаю, что это создает сеть, если ее не существует, и, конечно, приложение помещается в эту сеть. Я не знаю, нужно ли это сделать, потому что все эти контейнеры находятся на одной машине (мой физический ноутбук), и поэтому я читаю, что должна быть сеть по умолчанию, где уже есть сеть по умолчанию. Дорога, у меня есть контейнер Kafka, и я хочу, чтобы мое приложение для Spring Boot в контейнере поговорило с этой кафкой также в контейнере Docker.

    Когда я развернут передний конец (React /Angular) в свой собственный контейнер, они будут разработаны позже, и задняя часть не будет зависеть от этого. Я не хочу, чтобы фронт-энд полагался на задний план. В этой непрофильной среде я возьму на себя ответственность за то, чтобы услуги работали в первую очередь, прежде чем я начну фронт-энды, если в производственной среде или базе данных не работают. Кафка должен быть запущен следующим
  • Тогда заднее время может запустить, так как Kafka и DB начинаются
  • Тогда передний конец может работать, потому что заполняется заднее время
Надеюсь, кто-нибудь поможет мне выяснить соединение между контейнером.>

Подробнее здесь: https://stackoverflow.com/questions/794 ... another-co
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Docker: соединение с базой данных в другом контейнере
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как правильно общаться с базой данных Localhost 8000 »по файлам?
    Anonymous » » в форуме Html
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как правильно общаться с базой данных Localhost 8000 »по файлам?
    Anonymous » » в форуме CSS
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Python в контейнере Docker отказался от подключения к Postgres в сетевом контейнере Docker
    Anonymous » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Интеграционные тесты Gitlab CI для проекта Spring Maven с базой данных PSQL в контейнере Docker
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «MySql»