应用程序无法使用Docker连接到SMTP主机和端口587

时间:2019-12-13 06:58:53

标签: java docker docker-compose

我是Docker的新手。我需要您的帮助来解决过去1周内我面临的一个docker问题。我有一个Spring Boot应用程序,该应用程序使用SMTP主机和SMTP端口连接到公司的电子邮件服务器以发送电子邮件。该应用程序在本地作为普通Java程序运行时运行良好。应用程序能够与SMTP服务器建立连接并能够发送电子邮件。现在,一旦应用程序在docker容器上,我就会收到“连接超时”错误。

请注意,我能够从docker容器中发送诸如google.com之类的curl命令,只是为了检查我是否能够连接到互联网并能够在那儿获得响应。我不确定可能会出错,因为curl适用于HTTP,但SMTP连接不适用于docker容器。我需要对docker设置进行任何更改吗?

我也曾尝试使/ etc / hosts文件和/etc/resolve.conf与主机配置文件相提并论,但仍然无法继续进行。我使用的是Mac,因此我认为该错误可能是由于docker for mac创建的薄层VM的设置而引起的,因此我尝试在Linux机器上运行该应用程序,但仍然没有成功。

任何建议或指示将不胜感激。

错误堆栈跟踪:

notification-service        | Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.company.com, 587; timeout 10000
notification-service        |   at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209) ~[javax.mail-1.6.1.jar!/:1.6.1]
notification-service        |   at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740) ~[javax.mail-1.6.1.jar!/:1.6.1]
notification-service        |   at javax.mail.Service.connect(Service.java:366) ~[javax.mail-1.6.1.jar!/:1.6.1]
notification-service        |   at javax.mail.Service.connect(Service.java:246) ~[javax.mail-1.6.1.jar!/:1.6.1]
notification-service        |   at com.company.EmailSender.sendEmailNotification(EmailSender.java:127) ~[classes!/:na]
notification-service        |   ... 38 common frames omitted
notification-service        | Caused by: java.net.SocketTimeoutException: connect timed out
notification-service        |   at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_171]
notification-service        |   at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_171]
notification-service        |   at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_171]
notification-service        |   at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_171]
notification-service        |   at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_171]
notification-service        |   at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_171]
notification-service        |   at com.sun.mail.util.WriteTimeoutSocket.connect(WriteTimeoutSocket.java:115) ~[javax.mail-1.6.1.jar!/:1.6.1]
notification-service        |   at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:351) ~[javax.mail-1.6.1.jar!/:1.6.1]
notification-service        |   at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:239) ~[javax.mail-1.6.1.jar!/:1.6.1]
notification-service        |   at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175) ~[javax.mail-1.6.1.jar!/:1.6.1]
notification-service        |   ... 42 common frames omitted

这是我的Dockerfile

FROM com.company/serverjre:8

ARG JAR_FILE
ARG JAR_INSTRUMENT

VOLUME /tmp
COPY ${JAR_FILE} /app.jar
COPY ${JAR_INSTRUMENT} /spring-instrument.jar

EXPOSE 9000

ENTRYPOINT exec java -javaagent:/spring-instrument.jar -Duser.timezone=GMT -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar

这是我的docker-compose.yml的代码段

version: '3.5'
services:
  notification-service:
    hostname: notification-service
    container_name: notification-service
    image: com.company/notification-service:1.0-SNAPSHOT
    depends_on:
      - kafka
      - kafka-schema-registry
    ports:
      - 9810:9810
    volumes:
      - ./notification-service-application.yaml:/config/application.yml

试图在docker-compose.yml中添加端口587:587,但没有成功。

1 个答案:

答案 0 :(得分:0)

经过2周的奋斗,发现问题只在我身上。问题是缺少SMTP代理设置。配置SMTP代理设置后,出现读取超时错误。因此,我将整体超时设置从10000增加到20000,瞧,我能够将电子邮件发送给收件人了。

在此处提供答案,以防万一遇到类似问题的人登陆此页面,并且该页面可能能够为他们提供帮助。