我有一个 Nx Monorepo,其中包含多个 NestJS API。我正在尝试将其中一个 API 的 Docker 映像推送到 GitLab 容器注册表,但由于似乎超时而不断失败。
这是我的项目结构的简单介绍:
单一仓库
--package.json
--应用程序
----app-api
------Dockerfile
这是我的 app-api 的 Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 4002
CMD ["npm", "run", "start:app-api"]
我在本地构建图像
docker build -t registry.gitlab.com/<group>/<project>/app-api -f apps/app-api/Dockerfile .
这样就成功了。但是,当我尝试推送到 GitLab 容器注册表时:
docker push registry.gitlab.com/<group>/<project>/app-api
我得到以下错误输出:
Using default tag: latest
The push refers to repository [registry.gitlab.com/<group>/<project>/app-api]
c4b377e26346: Pushing [==================================================>] 2.276GB/2.276GB
a6ddf7465691: Layer already exists
971cfc403c58: Layer already exists
9c2c8f3cfe79: Layer already exists
3fecce352908: Layer already exists
1da03ac21ec8: Layer already exists
926b35a05f1d: Layer already exists
d4fc045c9e3a: Layer already exists
use of closed network connection
然后我可以在 GitLab 的容器注册表中看到该映像,但它有 0 个标签并显示“此映像没有活动标签。 与此图像相关的最后一个标签最近已被删除。作为常规垃圾收集过程的一部分,该空图像和任何相关数据将被自动删除。如果您有任何疑问,请联系您的管理员。”
您需要在构建图像后对其进行标记。
docker tag [Tag name] registry.gitlab.com:4002/fedora/httpd: version1.0