[英]How to expose an asp.net core docker container to a public url?
如果我有一个公共 url,例如https://dogsandcats.com
并且我希望能够从已部署的 docker 容器连接到该服务器,我该怎么做?
目前,我的 .Net Core 项目有以下 Dockerfile:
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
EXPOSE 8080
ENTRYPOINT ["dotnet", "MedicineInventoryManagement.dll"]
我暴露了端口 8080,当我在本地环境中访问 localhost:8080 时,我可以看到我的网络服务器正在分发应用程序。 我已经在https://dogsandcats.com
上映射了端口 8080,但它不像在我的本地计算机上那样运行。
我必须对Program.cs
的以下代码块做些什么吗?
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
}
还是问题出在其他地方?
microsoft/dotnet:aspnetcore-runtime 映像将 ASPNETCORE_URLS 环境变量设置为http://+:80 ,这意味着如果您没有在应用程序中明确设置 URL,例如通过 Program.cs 中的 app.UseUrl,则您的应用程序将侦听容器内的端口 80。
我会使用自下而上的方法来调试这些问题。
docker ps
检查您的容器向主机公开哪些端口以及它绑定到哪些端口? 查看端口列下。 您还可以使用以下命令并提供您的容器名称: docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID
如果端口按预期公开,则需要在主机上检查一些事项。 现在,根据您的环境设置方式,步骤可能会有所不同,但您会明白我的意思。
首先查看防火墙规则。 例如,如果您使用的是 Ubuntu 并启用了 UFW,请检查规则是否配置为允许访问该端口。 如果您在家庭/办公室路由器后面,您可能希望打开端口以让公共流量来自该端口。 如果您正在运行像 Apache/Nginx 这样的服务器,我会检查我的虚拟主机/服务器块是否配置正确。
如果您发现您的端口已按预期打开,请尝试使用您网络的公共 ip 访问它。 如果我们无法使用机器的公共 IP 访问 DNS 记录,那么查看 DNS 记录就毫无意义。 毕竟,这就是 DNS 所指向的。 如果您无法访问,我将返回到第 2 步。
如果第 3 步都清楚,那么我会查看 DNS 记录并尝试找出问题所在。
为了理解这个过程,这里有一个非常高级的概述。 尝试自下而上的方法,这样您就可以准确地指出您遇到的问题。
[DNS] => [您网络的公共 IP] => [硬件防火墙,如路由器等] => [Nginx/Apache Web 服务器等,如果有的话] => [机器的防火墙,如操作系统或第三方] => Docker 主机端口 => 容器中的 Dotnet 核心端口。
如果您只是想快速测试一些用于开发目的的东西,您也可以使用类似ngrok 的东西。 通过为您设置代理(特别是当您位于无法控制的严格防火墙后面时),这消除了第 2 步和第 3 步的痛苦。 我与 ngrok 没有任何关联。 还有其他一些替代方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.