我有一个名为“inventory-backend”的插件。它包括 Knex 迁移文件夹“migrations”。在本地运行良好。
在这里,我完全按照 Backstage Docs 创建了一个 Docker 镜像(https://backstage.io/docs/deployment/k8s/ 和 https://backstage.io/docs/deployment/docker/)。这是我的 Dockerfile:
FROM node:18-bookworm-slim
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends python3 g++ build-essential && \
yarn config set python /usr/bin/python3
USER node
WORKDIR /app
ENV NODE_ENV production
COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \
yarn install --frozen-lockfile --production --network-timeout 300000
COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./
RUN tar xzf bundle.tar.gz && rm bundle.tar.gz
CMD ["node", "packages/backend", "--config", "app-config.yaml"]
接下来,我将按照文档建议的方式再次部署 Postgre 和 Backstage。但是通过部署创建的 pod 出现此错误:
Backend failed to start up [Error: ENOENT: no such file or directory, scandir '/app/plugins/inventory-backend/migrations'] { errno: -2, code: 'ENOENT', syscall: 'scandir', path: '/app/plugins/inventory-backend/migrations' }
当我查看容器内部时,我没有看到“migrations”文件夹。所以我将这一行添加到 Dockerfile 中:
COPY plugins/inventory-backend/migrations /app/plugins/inventory-backend/migrations
现在,当我检查容器内部时,我看到迁移文件夹就在那里。但它给了我同样的错误。怎么会发生这种事?
谢谢你。
我在公司花了半年时间集成Backstage并创建了几个插件。
确保插件具有其所有依赖项,并且您也将所有者更改为节点:节点。