Golang docker库图像在$ PATH中找不到go工具

时间:2017-06-09 00:17:47

标签: docker go docker-compose dockerfile

我在docker-library/golang#164上打开了一个问题,因为我认为这是一个错误。但是,我想我也会在StackOverflow上询问是否有其他人(除了项目贡献者)遇到过这个或者有任何想法?

首先,版本号:

$ docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Tue Mar 28 00:40:02 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:00:50 2017
 OS/Arch:      linux/amd64
 Experimental: true

$ docker-compose version
docker-compose version 1.11.2, build dfed245
docker-py version: 2.1.0
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2j  26 Sep 2016

我收到以下错误:

Cannot start service web: oci runtime error: container_linux.go:247: starting container process caused "exec: \"go\": executable file not found in $PATH"

这是我的Dockerfile

FROM golang:1.8

WORKDIR /go/src/gigem
COPY . /go/src/gigem

RUN go build
RUN go install

CMD ["gigem"]

我也使用Compose(我将包含yml,但是有/无compose时会出错):

version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./data:/var/lib/postgresql/data
  web:
    build: .
    volumes:
      - .:/go/src/gigem
    ports:
      - "3000:3000"
    depends_on:
      - db

我的Go计划中的所有内容都是:

package main

import (
  "fmt"
  "net/http"
)

func main() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello Docker!")
  })

  fmt.Println("Running!")
  fmt.Println(http.ListenAndServe("0.0.0.0:3000", nil))
}

我不太确定为什么在$PATH找不到。

2 个答案:

答案 0 :(得分:0)

我最近测试了你的Dockerfile和main.go,但我没有发现任何错误。

我认为您应该尝试使用golang: 1.8

再次提取docker build --pull .

我修改了你的Dockerfile,添加了两行来调试图像,试试:

FROM golang: 1.8
    
WORKDIR / go / src / gigem
COPY. / Go / src / gigem

RUN echo $ PATH
RUN which go
RUN go build
RUN go install

CMD ["gigem"]

Echo $ PATHwhich go会告诉您二进制文件go是否在PATH中

答案 1 :(得分:0)

从评论中,我自己测试了这段代码而没有错误(诚然在17.06-rc2,但行为不应该改变)。鉴于重新启动解决了这个问题,似乎在docker内部存在一些需要反弹才能纠正的腐败(虽然很少见,但这不是我第一次看到这个)。对于其他遇到问题的人,我想按顺序尝试以下方法:

  1. 在没有缓存的情况下拉出新图像和/或重建以解决图层的任何问题
  2. 重新启动docker以查看守护程序中可能存在的损坏
  3. 重新启动整个主机,以解决在docker守护程序之外持久存在的运行时配置问题
  4. 停止使用dockerd后,擦除/var/lib/docker会破坏所有容器,图像和卷(首先备份)并开始清理