尝试使用管道将多项目应用程序部署到 azure。尝试各种组合后(管道日志显示过去几天运行次数约为 75/80),问题似乎出在 Visual Studio 2019 的 Dockerfile 或 Azure Pipeline 的某处。
这是我将范围缩小到的内容:
项目A-
- 创建一个 vs asp.net core webapp 项目,例如 test1sp,
- 选中在同一文件夹中创建解决方案和项目的复选框,
- 选择 docker 支持(我选择了 Linux)或稍后添加
- 未添加任何代码,样板代码按原样运行良好
- 将其添加到 GitHub
- 在 azure 中创建项目/管道,源 Github,我使用没有 YAML 的经典编辑器
- 创建一个 docker build/push 任务并设置,我选择最基本的选项、订阅等。
- 构建效果很好,我还添加了部署到应用服务任务,并将其部署到应用服务
项目 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 编辑相对较新,看到了很多详细/复杂的场景,希望有人可以阐明如何让它工作?
这是项目文件/结构的屏幕截图:
更新 - 将 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/