【问题标题】:Docker permission error while up启动时Docker权限错误
【发布时间】:2018-06-06 08:59:26
【问题描述】:

我正在使用以下 dockerfile 到 build and run 去应用程序 应用程序名称是book-store,它位于我本地mac 中的go/src/book-store 下。

go
-src
--book-store
--main.go

现在我已经创建了以下 docker 文件

FROM golang:1.9.6-alpine

RUN apk update && apk upgrade && apk add --no-cache bash git

RUN go get github.com/gin-gonic/gin


ENV SOURCES /go/src/book-store
COPY . ${SOURCES}


RUN cd ${SOURCES} && CGO_ENABLED=0 go build

RUN chmod +x /go/src/book-store

WORKDIR ${SOURCES}
CMD ${SOURCES}
EXPOSE 8080

此外,我还创建了这个 docker compose

version: '2'
services: 
  book-store-web:
    build: .
    image: book-store:1.0.1
    environment: 
    - PORT=8080
    ports: 
    - "8080:8080"

现在我用

docker-compose build

成功创建了图像,现在我想用 docker-compose up

我收到以下错误:

Creating book-store_book-store-web_1 ... done
Attaching to book-store_book-store-web_1
book-store-web_1  | /bin/sh: /go/src/book-store: Permission denied
book-store_book-store-web_1 exited with code 126

知道这里有什么问题吗?

我添加了RUN chmod +x /go/src/book-store 来克服权限问题,但没有成功...

【问题讨论】:

  • 您似乎正在尝试执行一个目录。 docker-compose.yml 是哪个目录?

标签: shell docker go docker-compose dockerfile


【解决方案1】:

您的 cmd 行不正确,应为:

CMD ${SOURCES}/book-store

你正在尝试执行一个目录

此外,除了这个容器以 root 身份运行之外,您应该真正让它以您创建的没有 root 权限的用户身份运行。

您可以使用看起来有点像这样的 Dockerfile 来做到这一点:

FROM golang:1.9.6-alpine

RUN apk update && apk upgrade && apk add --no-cache bash git

RUN go get github.com/gin-gonic/gin

ENV SOURCES /go/src/book-store
COPY . ${SOURCES}

RUN addgroup goapi && \
  adduser -D -S -G goapi goapi && \
  cd ${SOURCES} && \
  CGO_ENABLED=0 go build && \
  chmod +x /go/src/book-store && \
  chown -R goapi:goapi /go

USER goapi

WORKDIR ${SOURCES}
CMD ${SOURCES}/book-store
EXPOSE 8080

希望这会有所帮助。

【讨论】:

  • 1+ 你能否详细说明或更好,提供示例:) 我应该如何改进我的 dockerfile /compose ?我对这个话题有点陌生。谢谢!
  • 当然,我添加了答案,显然检查这对你有用,但它给你一个想法。
猜你喜欢
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多