Я новый ребенок в Docker. Я использую docker в приложении весенней загрузки. Ниже мой файл.
Файл Application.properties:
spring.datasource.url=jdbc:mysql://${DATABASE_HOST}:3306/${DATABASE_NAME}?allowPublicKeyRetrieval=true&useSSL=true
spring.datasource.username = root
spring.datasource.password = root
server.port=8443
DockerFile:
FROM openjdk:latest
ADD target/app.jar app.jar
EXPOSE 8443
ENTRYPOINT ["java","-jar","app.jar", "--spring.profiles.active=docker"]
Docker Состав:
version: '3.1'
services:
mysqlDb:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=springdemo
- MYSQL_USER=root
- MYSQL_PASSWORD=root
- DATABASE_HOST= 192.168.0.1
volumes:
- /data/mysql
ports:
- "3306:3306"
container_name: mysql-db
springbootdocker:
image: xyz/signup
restart: always
ports:
- "8080:8080"
depends_on:
- mysqlDb
links:
- mysqlDb
environment:
- DATABASE_HOST= mysqlDb
- DATABASE_USER=root
- DATABASE_PASSWORD=root
- DATABASE_NAME=springdemo
- DATABASE_PORT=3306
healthcheck:
test: ["CMD","curl","-f","http://localhost:8080/health"]
interval: 1m30s
timeout: 10s
retries: 3
Решена 1-я часть проблемы: при запуске приложения я получаю следующую ошибку:
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Caused by: java.net.UnknownHostException: ${DATABASE_HOST}
1) Что я пытаюсь достичь -
- Хотите создать банку для моего приложения.
- После создания баночки я хочу создать изображение из баночки
- После создания образа приложения , я хочу положить sh в docker хаб.
- С другого сервера я буду запускать файл docker -compose.yml. Он извлечет mysql и образ из хаба docker и запустит приложение на другом порту, как указано в docker -compose.
Надеюсь, я ясно, что я хочу
Здесь возникает проблема:
, когда я пытаюсь запустить приложение локально, я могу создать только банку когда я пишу эту строку в классе application.properties.
spring.datasource.url = jdb c: mysql: //127.0.0.1: 3306 / springdemo? allowPublicKeyRetrieval = true & useSSL = true
Я могу создать банку и после этого изображения -> загрузить это изображение в docker концентратор, когда я запускаю docker -компоновать возможность чтобы извлечь это изображение, но не может подключиться к mysql верстаку.
Итак, я подумал, что я запускаю docker -compose в различных системах / серверах. Там IP-адрес другой.
Итак, я изменил URL-адрес на это:
spring.datasource.url = jdb c: mysql : //192.168.0.1: 3306 / springdemo? AllowPublicKeyRetrieval = true & useSSL = true
где
192.168.0.1 - this ip is for the diffrent server, where i want to run the docker-compose file
Но когда я запускаю приложение весенней загрузки, я не могу запустить приложение, потому что оно говорит почти ту же ошибку, что и выше, то есть отказ в соединении. Так что я не могу создать банку, поэтому не могу создать изображение. Таким образом, моя идея не работает и здесь.
- И снова, одна мысль снова приходит мне на ум, не можем ли мы поместить динамический c IP-адрес в файл application.properties, поэтому я попробовал эту строку :
spring.datasource.url = jdb c: mysql: // $ {DATABASE_HOST}: 3306 / $ {DATABASE_NAME}? AllowPublicKeyRetrieval = true & useSSL = true
DATABASE_HOST - вы можете найти его в docker -компонентном файле
Я подумал, что это может быть: $ {DATABASE_HOST}, выберет значение DATABASE_HOST из docker - compose.
Но моя идея не удалась, я получаю сообщение об ошибке, как указано в верхней части при запуске приложения. не могу создать банку, поэтому не могу создать изображение.
2-я часть - проблема все еще открыта
, когда я могу запустить docker -создать в моем локальном терминале, и в состоянии создать контейнер. Я также вижу, что mysql подключен, как и моя схема. Но когда я пытаюсь получить доступ к своему API через почтальон или веб-браузер, он говорит, что не подключен
http://localhost:8080/dockerex
Внутри моего класса контроллера:
@RestController
@RequestMapping(value = "/dockerex")
public class SpringBootDockerController {
@GetMapping
public String check() {
return "checking";
}
}
, когда я проверяю свой контейнер, ip адрес становится пустым: снимок conatiner:
[
{
"Id": "7664bab5ed452e3e2243e1802010240ab5a3eb817af6164e985b10e729ff4c8f",
"Created": "2020-02-04T17:30:08.5351511Z",
"Path": "java",
"Args": [
"-jar",
"app.jar",
"--spring.profiles.active=docker"
],
"State": {
"Status": "running"
.......................
"PortBindings": {
"8080/tcp": [
{
"HostIp": "",
"HostPort": "8080"
}
]
},