首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: dockerfile解析错误无效字段‘’

错误: dockerfile解析错误无效字段‘’
EN

Stack Overflow用户
提问于 2022-03-17 15:40:18
回答 2查看 236关注 0票数 1

我正试图将Go开发环境封装起来。我指的博客:https://www.docker.com/blog/containerize-your-go-developer-environment-part-1/

我收到了一个错误:

未能解决与前端dockerfile.v0:未能解决与前端gateway.v0: rpc错误:代码=未知desc =无效字段'‘必须是一个key=value对Makefile:8:配方的目标’bin/示例失败的制造:*bin/示例错误1

我的Dockerfile:

代码语言:javascript
复制
# syntax = docker/dockerfile:1-experimental

FROM --platform=${BUILDPLATFORM} golang:1.17.8-alpine AS base
WORKDIR /src
ENV CGO_ENABLED=0
COPY go.* .
RUN --mount=type=cache, target=/go/pkg/mod go mod download

FROM base AS build
ARG TARGETOS
ARG TARGETARCH
RUN --mount=target=. --mount=type=cache, target=/go/pkg/mod --mount=type=cache, target=/root/.cache/go-build GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/example .

FROM base AS unit-test
RUN --mount=target=. --mount=type=cache, target=/go/pkg/mod --mount=type=cache, target=/root/.cache/go-build go test -v .

FROM golangci/golangci-lint:v1.43-alpine AS lint-base

FROM base AS lint
RUN --mount=target=. --mount=from=lint-base, src=/usr/bin/golangci-lint, target=/usr/bin/golangci-lint --mount=type=cache, target=/go/pkg/mod --mount=type=cache, target=/root/.cache/go-build --mount=type=cache, target=/root/.cache/golangci-lint golangci-lint run --timeout 10m0s ./...

FROM scratch AS bin-unix
COPY --from=build /out/example /

FROM bin-unix AS bin-linux
FROM bin-unix AS bin-darwin

FROM scratch AS bin-windows
COPY --from=build /out/example /example.exe

FROM bin-${TARGETOS} AS bin

Makefile如下:

代码语言:javascript
复制
all: bin/example
test: lint unit-test

PLATFORM=linux/amd64

.PHONY: bin/example
bin/example:
    @docker build . --target bin --output bin/ --platform ${PLATFORM}

.PHONY: unit-test
unit-test:
    @docker build . --target unit-test

.PHONY: lint
lint:
    @docker build . --target lint

在航站楼:

代码语言:javascript
复制
atin@atin-VirtualBox:~/Desktop/container-go-dev$ export DOCKER_BUILDKIT=1
atin@atin-VirtualBox:~/Desktop/container-go-dev$ make
[+] Building 23.2s (5/5) FINISHED                                               
 => [internal] load build definition from Dockerfile                       1.6s
 => => transferring dockerfile: 38B                                        0.4s
 => [internal] load .dockerignore                                          1.3s
 => => transferring context: 34B                                           0.3s
 => resolve image config for docker.io/docker/dockerfile:1-experimental   10.3s
 => [auth] docker/dockerfile:pull token for registry-1.docker.io           0.0s
 => CACHED docker-image://docker.io/docker/dockerfile:1-experimental@sha2  0.0s
failed to solve with frontend dockerfile.v0: failed to solve with frontend gateway.v0: rpc error: code = Unknown desc = failed to create LLB definition: dockerfile parse error line 7: invalid field '' must be a key=value pair
Makefile:8: recipe for target 'bin/example' failed
make: *** [bin/example] Error 1
EN

回答 2

Stack Overflow用户

发布于 2022-03-18 14:36:07

这是您的停靠文件的第7行:

代码语言:javascript
复制
RUN --mount=type=cache, target=/go/pkg/mod go mod download

我当然不是dockerfiles方面的专家,但这种语法在我看来并不正确。我不知道RUN命令在您的映像中调用了什么程序,但是我怀疑这里是否应该有逗号,在“装入”和“类型”之间是否应该有等号,还是应该是破折号呢?还有,在这里用"--“来传递一个选项有效吗?

票数 0
EN

Stack Overflow用户

发布于 2022-03-18 19:52:50

在整个文件中有许多无效的空格,包括顶部的语法行(可能导致忽略它)和--mount选项:

代码语言:javascript
复制
RUN --mount=type=cache, target=/go/pkg/mod go mod download

应该是

代码语言:javascript
复制
RUN --mount=type=cache,target=/go/pkg/mod go mod download
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71515162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档