java 如何使用主机上的SMTP服务器从容器发送电子邮件?

mum43rcc  于 11个月前  发布在  Java
关注(0)|答案(2)|浏览(106)

我有一个SMTP服务器在主机上的localhost端口25上侦听。在Podman容器(由非root用户启动)中运行的应用程序需要自动向注册用户发送电子邮件。现在,尝试发送电子邮件会导致Connection refused错误。我们如何设置容器以与主机的邮件服务器一起工作?
该应用程序能够在容器化之前发送电子邮件,所以我猜我们没有正确设置某些网络配置。
以下是Dockerfile的匿名版本:

FROM maven:3.8.1-amazoncorretto-8 as maven
LABEL APPLICATION="Application"
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean
RUN mvn package -DskipTests

FROM tomcat:8.5.75-jdk8-corretto
#ENV CATALINA_OPTS="-Xms1024m -Xmx4096m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -Xss512k"

#Move over the War file from previous build step
WORKDIR /usr/local/tomcat/webapps/
COPY --from=maven /app/target/application.war /usr/local/tomcat/webapps/application.war

# enables tomcat to read config from environment properties
RUN echo 'org.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource' >> /usr/local/tomcat/conf/catalina.properties

# copy in server.xml and web.xml customizations used for HTTPS
COPY server.xml /usr/local/tomcat/conf/server.xml
COPY web.xml /usr/local/tomcat/conf/web.xml


EXPOSE 8080
# expose port 8001 if you want to do remote debugging of the container
#EXPOSE 8001
EXPOSE 8443
# smtp
EXPOSE 25
CMD ["catalina.sh", "run"]

字符串

d5vmydt9

d5vmydt91#

好的,所以你的SMTP服务器在主机上,容器化的应用程序无法访问它。首先,容器有自己的网络空间,所以容器内的“localhost”不是主机的localhost。要解决这个问题,你有几个选择:
1.使用主机网络:使用主机的网络堆栈运行容器。这是最快的修复方法,但安全性较低。启动容器时使用podman run --network=host.。这会使容器使用主机的网络,因此容器中的localhostMap到主机的localhost。
1.将SMTP配置为侦听所有接口:默认情况下,您的SMTP服务器可能只侦听localhost(127.0.0.1)。将其配置更改为侦听所有接口(0.0.0.0)。但要注意安全问题;这会将您的SMTP服务器暴露给主机连接到的所有网络。
1.容器到主机通信:如果您不想使用主机网络,请在容器网络中查找主机的内部IP地址(通常类似于10.0.2.2,但可能会有所不同)。将您的应用配置为将此IP用于SMTP。

y0u0uwnf

y0u0uwnf2#

使用 pasta 或 * slirp 4 netns * 时,默认情况下不允许连接到主机上的localhost,但可以启用它。
如果使用 pasta,则添加podman run选项--network=pasta:--map-gw
如果使用 * slirp 4 netns *,则添加podman run选项--network=slirp4netns:allow_host_loopback=true
要连接到在侦听127.0.0.1:25的主机上运行的SMTP服务器,请连接到10.0.2.2:25

参考资料

相关问题