新手在这里的码头工人。
我想使用go
语言构建项目,我的docker-compose.yml
文件包含以下内容:
go:
image: golang:1.7-alpine
volumes:
- ./:/server/http
ports:
- "80:8080"
links:
- postgres
- mongodb
- redis
environment:
DEBUG: 'true'
PORT: '8080'
当我在终端中运行docker-compose up -d
时,它会返回以下错误:
`ERROR: for go Cannot create container for service go: No command specified`
我该如何解决?
答案 0 :(得分:1)
Golang:1.7-alpine只是构建Go容器的基础,并且没有CMD或ENTRYPOINT,因此立即结束。
使用真正做事的图像,比如每45秒打印一次你好世界
答案 1 :(得分:1)
我使用golang:1.7
代替golang:1.7-alpine
解决了这个问题。
答案 2 :(得分:0)
您应该使用将传递给默认ENTRYPOINT
的参数运行您的容器,以作为命令执行
但是现在最好的做法是使用多级,以便仅使用您的应用程序生成较小的图像。
或者您可以定义ENTRYPOINT
作为您的构建Go应用程序。
使用新的AS build-stage
关键字查看' 3.9.0'
您的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"]