Я пытался запустить greenmail-сервер в приложении с весенней загрузкой и докеризовать его, чтобы я мог использовать его в качестве локального mail-mock-сервера для проверки работоспособности почтовых функций в моем исходном приложении.
Образ докера работает правильно при запуске с использованием команды docker-compose up -d
и конечных точек, протестированных с помощью клиента REST.
Проблема возникает, когда я пытаюсь подключить его из исходного приложения для тестирования собраз докера, запущенный в контейнере.
Ниже приведена трассировка исключений при попытке отправить почту на mock-сервер.
org.springframework.mail.MailSendException: сбой подключения к почтовому серверу;вложенным исключением является javax.mail.MessagingException: не удалось подключиться к узлу SMTP: 127.0.0.1, порт: 8585, ответ: -1.Сообщения с ошибками: javax.mail.MessagingException: Не удалось подключиться к узлу SMTP: 127.0.0.1, порт: 8585, ответ: -1 на org.springframework.mail.javamail.JavaMailSenderImpl.doSend (JavaMailSenderImpl.java:446) ~ [весна-context-support-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.mail.javamail.JavaMailSenderImpl.send (JavaMailSenderImpl.java:359) ~ [spring-context-support-5.1.2.RELEASE.jar: 5.1.2.RELEASE] at org.springframework.mail.javamail.JavaMailSenderImpl.send (JavaMailSenderImpl.java:354) ~ [spring-context-support-5.1.2.RELEASE.jar: 5.1.2.RELEASE] at com.test.controller.MailTestController.sendMail (MailTestController.java:80) ~ [main /: na] at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_171] в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) ~ [na: 1.8.0_171] в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) ~ [na: 1.8f. J.invoke (Method.java:498) ~ [na: 1.8.0_171] ....................................................................................................... .......................................................................................................
Причина: javax.mail.MessagingException: Не удалось подключиться к узлу SMTP: 127.0.0.1, порт: 8585, ответ: -1 на com.sun.mail.smtp.SMTPTransport.openServer (SMTPTransport.java:2197) ~ [javax.mail-1.6.2.jar: 1.6.2] в com.sun.mail.smtp.SMTPTransport.protocolConnect (SMTPTransport.java:740) ~ [javax.mail-1.6.2.jar: 1.6.2] на javax.mail.Service.connect (Service.java:366) ~ [javax.mail-1.6.2.jar: 1.6.2] на org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport (JavaMailSenderImpl.java:515) ~ [spring-context-support-5.1.2.RELEASE.jar: 5.1.2.RELEASE] в org.springframework.mail.javamail.JavaMailSenderImpl.doSend (JavaMailSenderImpl.jpg435) ~ [spring-context-support-5.1.2.RELEASE.jar: 5.1.2.RELEASE] ... пропущено 100 общих кадров
Конфигурация DockerFileи docker-compose.yml mail-mock-server добавляются ниже.
DockerFile : -
FROM gcr.io/distroless/java:latest
VOLUME /opt/test/
ARG JAR_FILE
COPY libs/mock-mail-server-*.jar /opt/test/mock-mail-server-app.jar
WORKDIR /opt/test/
CMD ["mock-mail-server-app.jar"]
docker-compose.yml : -
version: '3'
services:
app:
image: test/mock-mail-server:0.0.1-SNAPSHOT
container_name: mock-mail-server-app
ports:
- 0.0.0.0:8484:8484
- 127.0.0.1:8585:8585
И сервер greenmail запускается в основном классе следующим образом.
@SpringBootApplication
public class MailMockServerApplication {
public static void main(String[] args) {
SpringApplication.run(MailMockServerApplication.class, args);
}
@Bean
public GreenMail greenMail() {
GreenMail smtpServer = new GreenMail(new ServerSetup(8585, "127.0.0.1", "smtp"));
smtpServer.setUser("test.mailer@test.com", "test", "test");
smtpServer.start();
return smtpServer;
}
}
После построения образа Docker и запуска контейнера Docker с помощью команды docker-compose up -d
Я попыталсяследующие конфигурации для bean-компонента JavaMailSender
в файле application.yml моего исходного приложения.
mail:
default-encoding: UTF-8
host: ${MAIL_SERVER_HOST:127.0.0.1}
username: ${MAIL_SERVER_USER_NAME:test}
password: ${MAIL_SERVER_PASSWORD:test}
port: ${MAIL_SERVER_PORT:8585}
properties:
mail:
debug: true
smtp:
debug: false
auth: true
starttls: true
protocol: smtp
test-connection: false
Между тем, это нормально работает, когда приложение mock-mail-server из командной строки использует команду java -jar
.Но когда я пытаюсь повторить то же самое в докере, происходит сбой с исключением соединения.
Я пропускаю какие-либо другие настройки в моем исходном приложении или приложении mock-server?
Буду признателен за любую помощь.