docker - 无法发送 docherize smpt 服务
问题描述
我有电子邮件服务,在对主 api 进行一些操作后触发。它是使用 webhost 构建的控制台应用程序:
public async Task SendMessageAsync(OrderUserDto mail)
{
var email = new MimeMessage();
email.Sender = MailboxAddress.Parse(_mailSettings.Value.Mail);
email.To.Add(MailboxAddress.Parse(mail.Email));
email.Subject = mail.Email;
var builder = new BodyBuilder();
builder.HtmlBody = mail.OrderDetails.ToString();
email.Body = builder.ToMessageBody();
using var smtp = new SmtpClient();
smtp.Connect(_mailSettings.Value.Host, _mailSettings.Value.Port, SecureSocketOptions.StartTls);
smtp.Authenticate(_mailSettings.Value.Mail, _mailSettings.Value.Password);
await smtp.SendAsync(email);
smtp.Disconnect(true);
}
class Program
{
static async Task Main(string[] args)
{
const string _appsettings = "appsettings.json";
var builder = new HostBuilder()
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile(_appsettings, true);
config.AddEnvironmentVariables();
if (args != null)
{
config.AddCommandLine(args);
}
})
.ConfigureServices((hostContext, services) =>
{
services.AddOptions();
services.Configure<MailSettings>(hostContext.Configuration.GetSection("MailSettings"));
services.Configure<RabbitMQSettings>(hostContext.Configuration.GetSection("RabbitMQConnection"));
services.AddSingleton<IHostedService, MailingService>();
services.AddSingleton<IMailService, MailService>();
});
await builder.RunConsoleAsync();
}
}
然后我把这个服务放到 dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 587
EXPOSE 465
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["ShoppingCart.Messaging.Service/ShoppingCart.Messaging.Service.csproj", "ShoppingCart.Messaging.Service/"]
RUN dotnet restore "ShoppingCart.Messaging.Service/ShoppingCart.Messaging.Service.csproj"
COPY . .
WORKDIR "/src/ShoppingCart.Messaging.Service"
RUN dotnet build "ShoppingCart.Messaging.Service.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ShoppingCart.Messaging.Service.csproj" -c Release -o /app/publish
WORKDIR /app
COPY --from=build /app/build .
ENTRYPOINT ["dotnet", "ShoppingCart.Messaging.Service.dll"]
然后 docker-compose
smtp:
container_name: smtp
build:
context: .
dockerfile: ShoppingCart.Messaging.Service/Dockerfile
depends_on: [ rabbitmq ]
ports:
- "587:465"
- "465:465"
networks:
- localdev
连接字符串到 RabbitMQ:
"RabbitMQConnection": {
"HostName": "localhost",
"Username": "guest",
"Password": "guest",
"Port": 5672,
"VirtualHost": "/",
"AutomaticRecoveryEnabled": true,
"RequestedHeartbeat": 30
},
所以我在 docker 映像中运行它时遇到问题,每次我收到该服务时都无法到达主机。但是,可以连接其他服务。
解决方案
推荐阅读
- python - mean_validation_score 给出一个 AttributeError
- javascript - 是否有记录 Jest/Puppeteer 测试套件的传统方法?
- linux - 使用 ASAN 时如何修复错误“无法运行 C 编译程序”
- python - 为什么 tkinter 按钮中的图片显示全黑?
- node.js - ReferenceError:未定义猫鼬。- 当我在 Chrome DevTools 上运行 jest 调试时
- php - 为指定类别的产品添加文本挂钩
- windows - 在 Docker 构建期间访问 Gitlab CI 变量
- sapper - 如何使用 svelte/sapper 进行页面转换
- swift - 如何从 UnsafeMutablePointer 获取 CVPixelBuffer 句柄
在斯威夫特? - r - 使用循环更改函数名称和过滤器值