标签: distroless

distroless 镜像中的无人和非 root 用户

Distroless 镜像有 3 个用户:

> docker run --rm --entrypoint cat gcr.io/distroless/nodejs:debug /etc/passwd
root:x:0:0:root:/root:/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/sbin/nologin
nonroot:x:65532:65532:nonroot:/home/nonroot:/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

USER如果您在Dockerfile中没有说明的情况下运行映像,则映像将以uid=0(root) gid=0(root)运行。

我想避免这种情况并使用非特权用户。

除了没有人没有目录之外,在我的 Dockerfile 中使用和/home之间有什么区别?USER nobodyUSER nonroot

linux privileges docker dockerfile distroless

8
推荐指数
1
解决办法
6831
查看次数

Golang distroless Docker exec 失败:启用 CGO 时没有此类文件或目录

我试图获得一个在 docker 容器内运行的最小示例 go 应用程序。exec /app: no such file or directory但我在运行容器时不断出现。

我检查并仔细检查了构建和复制应用程序数据的图像中的所有路径,甚至使用交互式 shell 查看容器内部以验证我的路径app是否存在,但没有任何效果。

我的 Dockerfile:

# syntax=docker/dockerfile:1
# BUILD-STAGE
FROM golang:1.17-alpine as build

WORKDIR /go/app

COPY . .

RUN go mod download

RUN go build -o /go/bin/app

# RUN-STAGE
FROM gcr.io/distroless/static-debian11

COPY --from=build /go/bin/app .

EXPOSE 8080

CMD ["./app"]
Run Code Online (Sandbox Code Playgroud)

经过几个小时的尝试和错误,我终于尝试添加CGO_ENABLED=0到我的 go build 命令中......并且它起作用了!

我现在的问题是......到底为什么会发生这种情况?当我在隐式启用 CGO 的情况下构建图像时没有出现错误,我什至验证了二进制文件已复制到我的第二阶段!为什么使用CGO构建时运行时说没有这个文件,但禁用CGO构建时可以很容易找到它?

go cgo docker distroless

4
推荐指数
1
解决办法
3517
查看次数

标签 统计

distroless ×2

docker ×2

cgo ×1

dockerfile ×1

go ×1

linux ×1

privileges ×1