无法下载docker golang映像:没有指定命令
docker工在这里的新手。
我想使用go
语言来构build一个项目,我docker-compose.yml
文件包含以下内容:
go: image: golang:1.7-alpine volumes: - ./:/server/http ports: - "80:8080" links: - postgres - mongodb - redis environment: DEBUG: 'true' PORT: '8080'
当我在terminal中运行docker-compose up -d
时,它返回以下错误:
`ERROR: for go Cannot create container for service go: No command specified`
我应该如何解决它?
Golang:1.7高山只是构buildGo容器的基础,没有CMD或入口点,所以立即结束。
使用一个真正有用的图像,例如每45秒打印一次Hello World
我用golang:1.7
代替了golang:1.7-alpine
解决了这个问题。
你应该用一个参数运行你的容器,这个参数将被传递给默认的ENTRYPOINT
,作为一个命令来执行
但是现在最好的做法是使用多阶段,以便只用您的应用程序生成较小的图像。
或者你可以将你的ENTRYPOINT
定义为你的构buildGo应用程序。
请参阅“ 使用Go使用Docker多阶段构build ”,使用新的AS build-stage
关键字。
您的Dockerfile将是:
# build stage ARG GO_VERSION=1.8.1 FROM golang:${GO_VERSION}-alpine AS build-stage MAINTAINER fbgrecojr@me.com WORKDIR /go/src/github.com/frankgreco/gobuild/ COPY ./ /go/src/github.com/frankgreco/gobuild/ RUN apk add --update --no-cache \ wget \ curl \ git \ && wget "https://github.com/Masterminds/glide/releases/download/v0.12.3/glide-v0.12.3-`go env GOHOSTOS`-`go env GOHOSTARCH`.tar.gz" -O /tmp/glide.tar.gz \ && mkdir /tmp/glide \ && tar --directory=/tmp/glide -xvf /tmp/glide.tar.gz \ && rm -rf /tmp/glide.tar.gz \ && export PATH=$PATH:/tmp/glide/`go env GOHOSTOS`-`go env GOHOSTARCH` \ && glide update -v \ && glide install \ && CGO_ENABLED=0 GOOS=`go env GOHOSTOS` GOARCH=`go env GOHOSTARCH` go build -o foo \ && go test $(go list ./... | grep -v /vendor/) \ && apk del wget curl git # production stage FROM alpine:3.5 MAINTAINER fbgrecojr@me.com COPY --from=build-stage /go/src/github.com/frankgreco/go-docker-build/foo . ENTRYPOINT ["/foo"]