首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >启动容器进程导致"exec:\"/app\":权限被拒绝“:未知

启动容器进程导致"exec:\"/app\":权限被拒绝“:未知
EN

Stack Overflow用户
提问于 2019-09-05 17:16:21
回答 3查看 7.5K关注 0票数 4

当我尝试用docker构建golang的时候

docker的映像构建成功,但在使用docker run运行时出现以下错误

代码语言:javascript
运行
复制
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/app\": permission denied": unknown.

我认为这个错误导致没有添加用户,所以我添加了组和用户,如下所示

代码语言:javascript
运行
复制
RUN groupadd -g 10001 myapp \
    && useradd -u 10001 -g myapp myapp

但没修好。

这是我的源docker文件

代码语言:javascript
运行
复制
FROM golang:1.12.9 as builder

ADD . /go/src/appname/

WORKDIR /go/src/appname/

ENV GO111MODULE=on

COPY go.mod .
COPY go.sum .

RUN go mod download
COPY . .

RUN  CGO_ENABLED=0 GOOS=linux GOARCH=amd64 make build target=prod

FROM alpine

RUN apk update \
  && apk add --no-cache

COPY --from=builder /go/src/ /app

ENTRYPOINT [ "/app" ]

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-05 17:34:01

在此步骤中,您将整个源文件夹复制到目录/app中:

代码语言:javascript
运行
复制
COPY --from=builder /go/src/ /app

然后尝试执行以下目录:

代码语言:javascript
运行
复制
ENTRYPOINT [ "/app" ]

相反,您需要复制go构建在复制步骤中输出的编译后的二进制文件。

票数 2
EN

Stack Overflow用户

发布于 2019-09-05 17:46:14

您需要指定二进制文件的输出目录。

代码语言:javascript
运行
复制
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o /app .

然后复制应用程序目录

代码语言:javascript
运行
复制
COPY --from=builder /app ./
RUN chmod +x ./app
ENTRYPOINT ["./app"]
票数 2
EN

Stack Overflow用户

发布于 2019-09-09 22:52:37

感谢大家的建议,我解决了这个问题。

我不能只复制正确指定的构建二进制文件

在此之前

代码语言:javascript
运行
复制
COPY --from=builder /go/src/ /app

之后

代码语言:javascript
运行
复制
COPY --from=builder /go/src/build/build_app_name /app

谢谢!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57802199

复制
相关文章

相似问题

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