问题
使用 Azure DevOps,我们使用 Dockerfile 来构建和静态服务 Angular 应用程序:
Dockerfile
FROM node:12-14-alpine AS build
WORKDIR /usr/etc/app
COPY *.json ./
RUN npm install
COPY . .
RUN npm run build -- -c stage
FROM node:alpine as runtime
WORKDIR /app
RUN yarn add express
COPY --from=build /usr/etc/app/dist/production ./dist
COPY --from=build /usr/etc/app/server.js .
ENV NODE_ENV=production
EXPOSE 8080
ENTRYPOINT ["node", "server.js"]
在本地,容器按预期构建。但是,在管道上运行这个 dockerfile(或类似的)会给出以下输出:
管道输出
Starting: Build frontend image
==============================================================================
Task : Docker
Description : Build, tag, push, or run Docker images, or run a Docker command
Version : 1.187.2
Author : Microsoft Corporation
Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/build/docker
==============================================================================
/usr/bin/docker pull =build /usr/etc/app/server.js .
invalid reference format
/usr/bin/docker inspect =build /usr/etc/app/server.js .
Error: No such object: =build /usr/etc/app/server.js .
[]
/usr/bin/docker build -f /home/***/YYY/app/myagent/_work/1/s/Frontend/Dockerfile --label com.azure.dev.image.system.teamfoundationcollectionuri=XXXX --label com.azure.dev.image.build.sourceversion=6440c30bb386************d370f2bc6387 --label com.azure.dev.image.system.teamfoundationcollectionuri=
Sending build context to Docker daemon 508.4kB
Step 1/18 : FROM node:12.14-alpine AS build
...
# normal build until finish, successful
(注意重复的teamfoundationcollectionuri
标签,但这是另一个问题)
问题
我们不明白:
- 第一个命令的构造方式和原因 (
/usr/bin/docker pull =build /usr/etc/app/server.js .
) - 第二个命令的构造方式和原因 (
/usr/bin/docker inspect =build /usr/etc/app/server.js .
) - docker 代理如何不识别 --from 子句,但仍然成功(并且正确)构建
- 为什么 docker 代理确实会警告无效的参考格式,然后继续正确识别每条指令。
顺便说一句,在构建 .NET 后端(使用类似的 dockerfile)时也会发生所有这些错误。
我们现在明白这个问题只发生在任务版本1.187.2
(或者0.187.2
,见下面的链接),而不是以前的版本1.181.0
(resp。0.181.0
)。
其他来源
关于这个问题,我们只能找到一个2018 年的旧问题线程,该线程已由 microsoft 存档。唯一的链接是通过 IP 地址,没有有效的证书。用户有完全相同的问题,但线程已关闭。有趣的是,次要版本号和补丁版本号与我们的系统相同。