我使用以下dockerfile
到build and run
go应用程序
应用程序名称为book-store
,位于我本地go/src/book-store
的{{1}}下。
mac
现在我创建了以下docker文件
go
-src
--book-store
--main.go
另外我创建了这个docker compose
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
现在我用
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
以克服权限问题但未成功...
答案 0 :(得分:2)
您的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
希望这会有所帮助。