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

问题描述 投票:0回答:2

我有一个 SMTP 服务器正在侦听主机上的本地主机端口 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"]
java smtp podman
2个回答
1
投票

好吧,所以您的 SMTP 服务器位于主机上,容器化应用程序无法访问它。首先,容器有自己的网络空间,因此容器内的“localhost”不是主机的本地主机。要解决此问题,您有几个选择:

  1. 使用主机网络:使用主机的网络堆栈运行容器。这是最快的修复方法,但安全性较差。启动容器时使用 podman run --network=host ... 。这使得您的容器使用主机的网络,因此容器中的 localhost 映射到主机的 localhost。

  2. 将 SMTP 配置为侦听所有接口:默认情况下,您的 SMTP 服务器可能仅侦听本地主机 (127.0.0.1)。更改其配置以侦听所有接口 (0.0.0.0)。但请注意安全隐患;这会将您的 SMTP 服务器暴露给主机连接到的所有网络。

  3. 容器到主机的通信:如果您不想使用主机网络,请找出容器网络中主机的内部IP地址(通常类似于10.0.2.2,但可能会有所不同)。配置您的应用程序以使用此 IP 进行 SMTP。

希望这有帮助...


0
投票

使用 pastaslirp4netns 时,默认情况下不允许连接到主机上的本地主机。

如果您使用 pasta,请添加 podman run 选项

--network=pasta:--map-gw

如果您使用 slirp4netns,请添加 podman run 选项

--network=slirp4netns:allow_host_loopback=true

要连接到正在侦听

127.0.0.1:25
的主机上运行的 SMTP 服务器,请连接到
10.0.2.2:25

我一起写了一些关于无根Podman网络文档的文档:

https://github.com/eriksjolund/podman-networking-docs?tab=readme-ov-file#outbound-tcpudp-connections-to-the-hosts-localhost

https://stackoverflow.com/a/74580507/757777

© www.soinside.com 2019 - 2024. All rights reserved.