【问题标题】:How to use docker run with release docker compose build from Visual Studio 2017如何在 Visual Studio 2017 中使用 docker run 和 release docker compose build
【发布时间】:2018-03-09 00:25:11
【问题描述】:

所以,我正在学习 Docker 并且是新手,我正在尝试使用 docker run 命令运行从 Visual Studio 2017 生成的映像。

一些背景:

目的是将docker镜像发布到Container Registry(我正在使用gitlab),在DigitalOcean中创建一个docker droplet并拉取镜像并运行它。

我正在尝试构建一个发布映像并首先在本地运行它。

我有一个包含 3 个项目的 VS 解决方案:

  • .net core mvc
  • .net 核心库
  • .net核心接口

我有一个 docker compose 文件,每个项目都有一个 docker 文件。全部由 Visual Studio 使用 docker 支持工具生成。

我可以在 VS 中以调试和发布模式构建和运行,它运行映像,我可以浏览到 Web 应用程序和 api - 一切都很好。

我试图按照这个问题的答案:

How to run docker image produced by VS 2017

所以我试过了:

docker run --rm -p 80:5000 -d myapp.web:latest

我在浏览器中尝试了http://localhost:5000http://127.0.0.1:5000 都无法加载或解析。

我可以通过docker images命令看到下面VS生成的docker镜像

REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
myapp.apinet                 latest              b3fa6d92bd23        24 hours ago        305MB
myapp.web                    latest              f418d4571ac3        24 hours ago        315MB
<none>                       <none>              50c89857daf1        24 hours ago        315MB

如果有帮助,我的 docker 文件之一:

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY *.sln ./
COPY src/myapp.Web/myapp.Web.csproj src/myapp.Web/
COPY src/myapp.Core/myapp.Core.csproj src/myapp.Core/
RUN dotnet restore
COPY . .
WORKDIR /src/src/myapp.Web
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

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

我还使用 docker inspect myapp.web 检查了 docker 映像,并且端口 80 已暴露:

"ExposedPorts": {   
"80/tcp": {}    
},                  

我已经尝试了来自https://github.com/dotnet/dotnet-docker/tree/master/samples/aspnetapp 的 asp.net 核心示例,如下所示,效果很好。

docker run --rm -p 8000:80 --name aspnetcore_sample microsoft/dotnet-samples:aspnetapp

有什么建议或想法吗?

【问题讨论】:

    标签: visual-studio docker docker-compose asp.net-core-2.0


    【解决方案1】:

    只是想在这里隔离问题。当我在这里和你一起工作时,请耐心等待。会尽我所能提供帮助:

    Q1 您使用的是 Docker for Windows Pro/Ent 还是 Docker Toolbox for Windows Home? Q2 你用的是什么版本的VS2017? docker是预装的还是你单独安装的? Q3 既然你提到有一个 docker compose,你有没有尝试运行 docker-compose up? Q4 你修改过你的dockerfile吗?你的 dockerfile 示例只是构建 web 而不是核心,这对我来说看起来很奇怪。还有网络引用核心项目吗?因为如果它是并且它没有被编译,那么它可能无法运行 Web 应用程序 Q5(仅当您使用 docker 工具箱时)您是否忘记使用 docker-machine ip 的 IP 地址而不是 localhost?

    还请查看我在本文中的回复,看看您是否遗漏了什么。 (也可能不适用于您的情况!) How to get docker toolbox to work with .net core 2.0 project

    【讨论】:

    • 您好,Q1:Window Pro N。Q2:VS Community 15.5.7,Q3:没有尝试过 docker-compose up。您能否提供一些提示? Q4:我修改了 dockerfile - 但只是为了更正项目名称,因为我正在进行一些重构。是的,我有一个 web 和 api 都引用的核心项目。奇怪的是,VS 能够通过 docker 运行 web 和 api - 只是想弄清楚它在幕后运行的是什么 docker cmd。我已经检查了输出窗口中的“build”和“docker”输出。 Q5:我不相信我在使用 docker 工具箱。我在 VS 中使用 docker 支持工具。谢谢
    • 您可以在构建开始时在 docker 窗口中查看命令。我保证它们与您可能正在做的事情没有什么不同。
    • docker-compose 编排多 dockerfile/container 情况。我强烈建议在命令行中使用 docker-compose up 来查看 docker 引擎是否启动了所有容器并按预期工作。
    猜你喜欢
    • 2017-09-19
    • 2020-12-23
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2020-12-07
    相关资源
    最近更新 更多