如何从 Windows 主机连接到 wsl2 内的 docker 容器内的应用程序?

Posted

技术标签:

【中文标题】如何从 Windows 主机连接到 wsl2 内的 docker 容器内的应用程序?【英文标题】:How to connect to app inside docker container inside wsl2 from Windows host? 【发布时间】:2022-01-16 05:38:09 【问题描述】:

在 Windows 上:

我刚刚通过dotnet new mvc 创建了应用程序并为此创建了 Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["src/App.csproj", "src/"]
RUN dotnet restore "src/App.csproj"
COPY . .
WORKDIR "/src/src"
RUN dotnet build "App.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "App.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "App.dll"]

然后我打开 wsl2,进入 /mnt/d/myproject 并构建 docker build -t app . 并启动它。

我看到它正在运行

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9e17cbwe6e4c        test1               "dotnet App.dll"    5 days ago          Up About a minute   80/tcp, 443/tcp     affectionate_goldstine

还有正确的日志:

[10:54:13 WRN] Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
[10:54:13 INF] User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
[10:54:13 INF] Now listening on: http://[::]:80
[10:54:13 INF] Application started. Press Ctrl+C to shut down.
[10:54:13 INF] Hosting environment: Production
[10:54:13 INF] Content root path: /app/

但我不确定如何连接它?

【问题讨论】:

你必须使用-p选项-p 80:80暴露80端口,你可以通过host_ip:80访问你的应用 【参考方案1】:

你需要使用 -p 暴露端口

docker run -itd --name myapp -p 80:80 <image>

然后您可以通过host_ip:80访问您的应用

【讨论】:

很好,谢谢 很高兴知道它有帮助

以上是关于如何从 Windows 主机连接到 wsl2 内的 docker 容器内的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

通过本地网络连接到 WSL2 服务器

如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)

如何使用 Docker Desktop for Windows 从主机连接到 Cassandra

如何将安装在主机服务器上的 phpmyadmin 连接到正在运行的 docker 容器内的 maria db? [关闭]

如何使用 127.0.0.1 从 Windows 主机访问在 WSL2 中运行的服务?

无法连接到WSL2上的Landoop Docker容器