azure - Azure DevOps 管道/VS 模板/dockerfile 中存在错误?

标签 azure azure-devops dockerfile azure-devops-pipelines

尝试使用管道将多项目应用程序部署到 azure。尝试各种组合后(管道日志显示过去几天运行次数约为 75/80),问题似乎出在 Visual Studio 2019 的 Dockerfile 或 Azure Pipeline 的某处。

这是我将范围缩小到的内容:

项目A-

  1. 创建一个 vs asp.net core webapp 项目,例如 test1sp,
  2. 选中在同一文件夹中创建解决方案和项目的复选框,
  3. 选择 docker 支持(我选择了 Linux)或稍后添加
  4. 未添加任何代码,样板代码按原样运行良好
  5. 将其添加到 GitHub
  6. 在 azure 中创建项目/管道,源 Github,我使用没有 YAML 的经典编辑器
  7. 创建一个 docker build/push 任务并设置,我选择最基本的选项、订阅等。
  8. 构建效果很好,我还添加了部署到应用服务任务,并将其部署到应用服务

项目 B - 我的项目名为 demo8

与项目 A 相同,但步骤 #2 除外 - 不要选择在同一文件夹中创建解决方案和项目。按照其余步骤操作,现在您应该会收到此错误。

Step 7/17 : COPY ["demo8/demo8.csproj", "demo8/"]
...
...
##[error]COPY failed: file not found in build context or excluded by .dockerignore: stat demo8/demo8.csproj: file does not exist

它在localhost/docker上运行良好。所以,我猜测 vs2019 可能会使用一些更宽容的实现来修补它。或者,azure 的实现有问题还是其他什么问题?

我对 Dockerfile 编辑相对较新,看到了很多详细/复杂的场景,希望有人可以阐明如何让它工作?

这是项目文件/结构的屏幕截图:

structure

更新 - 将 Dockerfile 移动到项目 B 中的解决方案文件夹使其可以在 azure 中运行,但是

  • 那么它无法在 Visual Studio 中运行,无法进行调试等。
  • 在项目和父文件夹中创建 Dockerfile 的副本(+保持同步)
  • 但是如果您的解决方案有多个像我这样的项目
  • 您必须将 Dockerfile 命名为不同的名称,以便在父文件夹中具有唯一的名称
  • 并修改管道以使用相应的文件名

将其发布在此处,以防对某人有帮助。

最佳答案

Dockerfile 中的代码必须具有 Dockerfile 所在文件夹级别的相对路径。

解决问题的方法有两种。一是修改Dockerfile中的代码,对于项目B,可以这样修改COPY代码:

COPY ["demo8.csproj", "demo8/"]

另一种方法是将 Dockerfile 移动到与您的 COPY 代码匹配的路径。但这样的话,可能会影响你的Dockerfile中的其他代码。

并且您最好将项目规划在不同的文件夹中,并为不同文件夹中的每个项目创建 Dockerfile。

关于azure - Azure DevOps 管道/VS 模板/dockerfile 中存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67362487/

相关文章:

docker - 在 Azure 管道中使用 Docker 镜像作为构建代理时出现错误

azure-devops - VS 2017 团队资源管理器 GIT "Push Branch"变灰

azure-devops - ##[错误]未找到与指定模式匹配的项目文件

docker - 当解压缩一个大文件时,如果没有足够的空间,则Docker构建失败,如何增加?

azure - 如何调试旧版 Azure 函数

sql-server - 应用服务迁移后 - 创建表错误

python - 我在 Visual Studio 和 azure 中导入时遇到此问题

node.js - 使用 docker 进行 Node 开发的工作流程

Dockerfile 问题 - 为什么找不到二进制 dlv - 没有这样的文件或目录

azure - 如何使用 SharedAccessSignature 访问 blob