无法下载 Docker Golang 镜像:未指定命令。

huangapple go评论101阅读模式
英文:

Unable to download docker golang image: No command specified

问题

新手在这里。

我想使用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`

我应该如何修复它?

英文:

Newbie in docker here.

I want to build a project using go language and my docker-compose.yml file has the following:

go:
    image: golang:1.7-alpine
    volumes:
      - ./:/server/http
    ports:
        - "80:8080"
    links:
        - postgres
        - mongodb
        - redis
    environment:
        DEBUG: 'true'
        PORT: '8080'

When I run docker-compose up -d in terminal, it returns the following error:

`ERROR: for go  Cannot create container for service go: No command specified`

How should I fix it?

答案1

得分: 1

Golang:1.7-alpine只是构建Go容器的基础,没有CMD或ENTRYPOINT,因此会立即结束。

使用一个真正执行某些操作的镜像,比如每45秒打印一次"Hello World"。

英文:

Golang:1.7-alpine is just a basis for building a Go container, and does not have a CMD or an ENTRYPOINT, so ends immediately.

Use an image doing really something, like printing hello world every 45 seconds

答案2

得分: 1

我使用golang:1.7代替golang:1.7-alpine解决了这个问题。

英文:

I solved it by using golang:1.7 instead of golang:1.7-alpine.

答案3

得分: 0

你应该在运行容器时使用一个参数,该参数将传递给默认的 ENTRYPOINT,作为一个要执行的命令。

但是现在的最佳实践是使用多阶段构建,以生成一个只包含你的应用程序的较小镜像。

或者你可以将你的 ENTRYPOINT 定义为构建 Go 应用程序。

参考 '使用 Docker 多阶段构建与 Go',使用新的 AS build-stage 关键字。

你的 Dockerfile 如下所示:

# 构建阶段
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

# 生产阶段
FROM alpine:3.5  
MAINTAINER fbgrecojr@me.com  
COPY --from=build-stage /go/src/github.com/frankgreco/go-docker-build/foo .  
ENTRYPOINT ["/foo"]  
英文:

You should run your container with an argument which will be passed to the default ENTRYPOINT, to be executed as a command

But the best practice these days is to use multistage, in order to generate a smaller image with just your application.

Or you can define your ENTRYPOINT being your build Go application.

See 'Using Docker Multi-Stage Builds with Go ', using the new AS build-stage keyword.

Your Dockerfile would be:

# 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"]  

huangapple
  • 本文由 发表于 2017年4月22日 12:25:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/43555213.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定