首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jenkins-Docker容器中使用的Docker SMTP容器

在Jenkins-Docker容器中使用的Docker SMTP容器
EN

Stack Overflow用户
提问于 2019-10-31 13:48:23
回答 1查看 1.6K关注 0票数 1

本主题是关于Docker网络的,我无法获得它允许被篡改的Jenkins使用被篡改的SMTP服务器.

下面是如何运行容器并将它们连接到用户定义的网络,以便容器的名称可以用作目标主机:

代码语言:javascript
复制
# Run Jenkins image, with port binding, Docker sock sharing, and configuration sharing
docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v /root/jenkins_conf/:/var/jenkins_home/ --name jenkins jenkins/jenkins:lts

# Run SMTP image
docker run -d --name smtp namshi/smtp

# Create user-defined network
docker network create jenkins-net

# Connect both containers
docker network connect jenkins-net jenkins
docker network connect jenkins-net smtp

在我的jenkins容器中,我可以通过默认的‘网桥’网络到达smtp服务:

代码语言:javascript
复制
$ (echo >/dev/tcp/172.17.0.5/25) &>/dev/null && echo "open" || echo "close"
open

我还可以通过我的用户定义的网络,通过IP和主机名达到它:

代码语言:javascript
复制
$ (echo >/dev/tcp/172.18.0.3/25) &>/dev/null && echo "open" || echo "close"
open
$ (echo >/dev/tcp/smtp/25) &>/dev/null && echo "open" || echo "close"
open

到目前为止,还不错。

但是,在Jenkins > Manage > Configure >电子邮件通知中,尝试使用测试电子邮件发送工具给了我以下结果:

代码语言:javascript
复制
SMTP server: 172.17.0.5 (SMTP container IP on the default 'bridge' network)
SMTP port: 25

=>的电子邮件是发送和适当地收到!

代码语言:javascript
复制
SMTP server: 172.18.0.3 (SMTP container IP on my user-defined 'jenkins-net' network)
SMTP port: 25

=>未能发送电子邮件com.sun.mail.smtp.SMTPAddressFailedException: 550中继不允许

代码语言:javascript
复制
SMTP server: smtp (SMTP container name on my user-defined 'jenkins-net' network)
SMTP port: 25

=>同误差

为什么在使用两个网络时,SMTP服务器的行为会有所不同呢?

我错过了什么码头人关系网?

编辑:因此,快速解决方案是使用-网络选项运行容器,而不是运行它,然后将它连接到网络。有关更多细节和充分性,请参见下面Stefano的回答。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-31 14:32:09

您描述的问题与码头联网无关。namshi/smtp映像使用exim4作为SMTP。在这个特定的exim4设置中,您需要提供允许它连接和发送电子邮件的网络。

在检查entrypoint.sh文件时,我发现了以下命令:

代码语言:javascript
复制
dc_relay_nets "$(ip addr show dev eth0 | awk '$1 == "inet" { print $2 }' | xargs | sed 's/ /:/g')${RELAY_NETWORKS}"

这意味着默认情况下,它将接受来自与接口eth0和其他可能的RELAY_NETWORKS相关联的IP地址的电子邮件(如果定义的话)。

由于容器在创建时不被默认地附加到jenkins-net网络,因此它不会识别来自该地址的电子邮件是有效的。

试着像这样启动容器:

代码语言:javascript
复制
docker network create jenkins-net
SUBNET=$( docker network inspect \
    -f '{{range .IPAM.Config}}{{.Subnet}}{{end}}' \
    jenkins-net )

docker run -d \
    --network jenkins-net \
    -e RELAY_NETWORKS=":${SUBNET}" \
    --name smtp \
    namshi/smtp

docker run -d \
    -p 8080:8080 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /root/jenkins_conf/:/var/jenkins_home/ \
    --network jenkins-net \
    --name jenkins \
    jenkins/jenkins:lts
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58644761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档