Следующий случай:
У меня есть два контейнера, один с базой данных MySQL, в которой есть несколько таблиц и прочее, и контейнер с подпружиненной загрузкой, которая запускает приложение .war, для которого требуется указанная база данных и нужен доступ для полета.Оба построены с помощью файла docker-compose и отдельных файлов Docker.
Как я могу соединить оба, чтобы мое приложение Springboot могло получить доступ к БД?Прямо сейчас я получаю сообщение об ошибке:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
, потому что он по-прежнему указывает на localhost (контейнер приложения), где ofc - это не mysql db.
spring.datasource.url: jdbc:mysql://#${db.hostname:localhost}:${db.port:3306}/${db.dbname:appdb}?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
Когда я изменяю db.имя хоста с IP-адресом сети, я все еще получаю ошибку.И я не знаю, как «поговорить» с контейнером напрямую.Есть идеи что делать?Когда это возможно, это должно происходить либо в Dockerfile, либо в файле docker-compose, либо в сценарии (в основном автоматически, без отдельных команд «docker run xxx -»).Проект должен проверить, может ли указанное приложение работать в среде докера.
Когда я проверяю, открыт ли порт 3306 docker0 (мост по умолчанию?) С помощью nmap, это так.
docker-compose.yml
version: "3"
services:
mysqldb:
container_name: mysqldb
networks:
- app-mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=app
build: ./mysql
volumes:
- datavolume:/var/lib/mysql
ports:
- "3306:3306"
app-sb:
container_name: app
build: ./app
networks:
- app-mysql
depends_on:
- mysqldb
links:
- mysqldb
volumes:
datavolume:
networks:
app-mysql:
driver: bridge
Dockerfile для mysqldb:
FROM mysql:5.7
COPY target/app-bck.sql /
ADD init_db.sh /tmp/init_db.sh
RUN /tmp/init_db.sh
Dockerfile для приложения Springboot:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/app.war /
COPY target/app.yaml /
RUN mkdir /etc/app
RUN mv app.yaml /etc/app/
RUN java -jar /app.war
/ etc/app/app.yaml
baseUrl: https://app.web.site
db.hostname: mysqldb
db.port: 3306
db.name: app
db.username: app
db.password: somepw
mail.host: localhost
mail.sender: no-reply@web.site