【问题标题】:.net core docker is working via VS2019, but image build is getting error and not working.net core docker 正在通过 VS2019 工作,但映像构建出错并且无法正常工作
【发布时间】:2019-08-23 19:05:17
【问题描述】:
  "Docker": {
  "commandName": "Docker",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/api/values",
  "httpPort": 52706,
  "useSSL": true,
  "sslPort": 44344
}

这会在通过 Visual Studio 运行时给出输出

但是在构建时,它会抛出错误

Docker 文件:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 83
EXPOSE 443

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

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENV ASPNETCORE_URLS http://+:83
ENTRYPOINT ["dotnet", "testdocker.dll"]

构建 docker 镜像

docker build -t testdock .

但它给了

COPY failed: stat /var/lib/docker/tmp/docker-builder666564019/testdocker/testdocker.csproj,: no such file or directory

请帮助重写 dockerfile 以完成此构建并运行应用程序

【问题讨论】:

  • 不知何故 Docker 认为 , 是您文件名 testdocker/testdocker.csproj 的一部分。由于您使用的COPY 的形式仅用于带有空格的文件名,因此请尝试使用“plan”COPY
  • @Arkadiy:不。这是 COPY 命令的特殊语法,其中命令作为字符串组件数组传递。 , 表示该数组中的一个新项目。它不是“路径”的一部分。
  • @ChrisPratt 知道,但有些东西很烂...testdocker.csproj,: no such file - 逗号不应该在那里。
  • 确实如此。这是我在下面的答案中发布的内容。复制到 MobyLinux VM 的目录不正确,因此 Dockerfile 路径错误。

标签: docker asp.net-core-2.2


【解决方案1】:

从概念上讲,COPY 采用 COPY 命令中指定的路径,只是一个示例

COPY server/nginx/nginx.conf /etc/nginx/conf.d

所以有必要从服务器的父级运行 docker 文件说路径是这样的。

xyz-app/server/nginx/nginx.conf

然后你需要去xyz-app目录然后运行(并指定docker文件路径使用-f)

docker build -f server/nginx/Dockerfile -t app.v1.0 .

【讨论】:

    【解决方案2】:

    Andrew 的示例对我有用。

    我的命令:

    docker build -f helloworld\dockerfile -t sr-app .
    

    【讨论】:

      【解决方案3】:

      对我来说,解决方法似乎是:

      docker build -f PROJECT_DIR\Dockerfile .

      从解决方案目录运行时。

      【讨论】:

        【解决方案4】:

        如果您查看 Visual Studio 中的容器工具输出,您会看到如下一行:

        docker build -f "C:\Users\foo\source\MySolution\TestDocker\Dockerfile" -t testdocker:dev --target base  --label "com.microsoft.created-by=visual-studio" "C:\Users\foo\source\MySolution"
        

        在 Windows 上为 Linux 容器构建映像时,Docker 会将活动目录的内容提升到 MobyLinux 虚拟机中,并且所有复制命令等都是针对 MobyLinux 虚拟机中的该路径而不是本地文件系统运行的。因为项目经常需要访问同一解决方案中的其他项目才能构建,所以 Visual Studio 创建的 Dockerfile 是相对于您的解决方案目录的,因此整个解决方案目录在 MobyLinux 中被提升。

        很可能,您所做的是直接导航到您的项目目录并从那里运行 Dockerfile,而无需传递目录以用作“根”。因此,Docker 只是提升了当前的,即 MobyLinux VM 中的项目、目录和生成的路径不再匹配 Dockerfile 中的内容。

        总而言之,如果您想手动构建映像,那么您需要确保提升的活动目录是您的解决方案目录,而不是您的项目目录。您可以通过将上面命令的最后一个字符串传递给您自己的命令来实现这一点,这将使其与您的解决方案相关。

        【讨论】:

        • 嗨,我能够构建图像,但现在的问题是我无法在浏览器Can’t connect securely to this page 中获得 api 响应。但这只是从视觉工作室运行
        猜你喜欢
        • 1970-01-01
        • 2020-09-15
        • 2017-07-20
        • 1970-01-01
        • 2020-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多