Docker 服务构建失败:拉取访问被拒绝,存储库不存在或可能需要'docker login'



我有一个包含Dockerfiledocker-compose.yml的项目。

Dockerfile

FROM mhart/alpine-node:11 AS builder
WORKDIR /app
COPY . .
RUN yarn install
RUN yarn build
WORKDIR /app
COPY --from=builder /app/build .
CMD ["serve", "-p", "80", "-s", "."]

docker compose.yml

version: "3"
services:
front:
build: .
ports:
- 8080:80
restart: always

当我试着像下面这样运行时。

docker compose up-d

我收到以下消息:

Building front
Step 1/8 : FROM mhart/alpine-node:11 AS builder
---> 5ff13b69f215
Step 2/8 : WORKDIR /app
---> Using cache
---> 1da7c0d4dfac
Step 3/8 : COPY . .
---> Using cache
---> 8d82bb9c0ecf
Step 4/8 : RUN yarn install
---> Using cache
---> 1e557a2dbe03
Step 5/8 : RUN yarn build
---> Using cache
---> ea2d3f56ff39
Step 6/8 : WORKDIR /app
---> Using cache
---> 1edb82c45c49
Step 7/8 : COPY --from=builder /app/build .
ERROR: Service 'front' failed to build: invalid from flag value builder: pull access denied for builder, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

我在Stackoverflow上看到了另一个问题,我想这可能与我的问题很接近
从标志值生成无效:生成的拉取访问被拒绝,存储库不存在或可能需要';docker登录';

但我只有一个构建阶段,而不是像问题中那样的两个阶段。

您的docker构建失败,因为您缺少用于运行时环境的FROM命令。这似乎是一个多阶段的docker构建,您正试图从名为builder的前一个构建阶段复制文件,但您仍处于构建的第一个(也是唯一一个(阶段(称为构建器(。

你有两个选择。任何一种都应该有效。

  1. 在构建中引入第二个运行时阶段:

添加另一个FROM命令,其中包含您想要作为运行时的映像。我刚刚在这里再次使用了mhart/alpine-node:11,但您可能需要不同的运行时环境。

FROM mhart/alpine-node:11 AS builder
WORKDIR /app
COPY . .
RUN yarn install
RUN yarn build
FROM mhart/alpine-node:11 AS runtime
RUN yarn global add serve
WORKDIR /app
COPY --from=builder /app/build .
CMD ["serve", "-p", "80", "-s", "."]
  1. 使其成为非多阶段构建:

只需删除COPY命令并将您的工作目录更改为构建目录:

FROM mhart/alpine-node:11 AS builder
RUN yarn global add serve
WORKDIR /app
COPY . .
RUN yarn install
RUN yarn build
WORKDIR /app/build
CMD ["serve", "-p", "80", "-s", "."]

相关内容

最新更新