Golang docker library image在$ PATH中找不到工具

我在docker-library / golang#164上打开了一个问题,因为我认为这是个bug。 但是,我想我也会问在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"] 

我也使用撰写(和我将包括YML,但错误发生与/不撰写):

 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找不到。

从评论中,我自己testing了这个代码没有错误(17.06-rc2,但行为不应该改变)。 鉴于重启解决了这个问题,Docker内部似乎有一些腐败需要反弹来纠正(虽然很less见,但这不是我第一次看到这个)。 对于未来遇到问题的其他人,我喜欢尝试以下方法:

  1. 拉新鲜的图像和/或重build没有caching任何问题与图层
  2. 重新启动泊坞窗在守护进程内可能的腐败
  3. 重新启动整个主机,以解决Docker守护程序之外的运行时configuration问题
  4. dockerd停止后,擦除/var/lib/docker docker将会销毁所有容器,映像和卷(所以先备份)并开始清理

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

我认为你应该试着拉golang: 1.8再次使用docker build --pull .

我修改你的Dockerfile添加两行来debugging图像,请尝试:

 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