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

Golang docker库映像在$PATH中找不到go工具,docker,go,docker-compose,dockerfile,Docker,Go,Docker Compose,Dockerfile,我在上打开了一个问题,因为我认为这是一个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

我在上打开了一个问题,因为我认为这是一个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"]
我也在使用Compose(我将包括yml,但在使用/不使用Compose时会出现错误):

我的围棋计划中的所有内容是:

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

中找不到go,我最近测试了Dockerfile和main.go,没有发现任何错误

我认为您应该尝试使用docker build--pull再次拉取
golang:1.8

我修改了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$PATH
哪个go
将显示二进制
go
是否在路径内。从注释来看,我自己测试了这段代码,没有错误(承认是在17.06-rc2上,但行为不应该改变)。考虑到重启解决了这个问题,docker内部似乎出现了一些需要反弹来纠正的损坏(虽然很少见,但这不是我第一次看到这种情况)。对于将来遇到问题的其他人,我想按顺序尝试一下:

  • 针对层的任何问题,在不缓存的情况下提取新图像和/或重建
  • 重新启动docker以检查守护进程内可能的损坏
  • 重新启动整个主机,以解决docker守护程序之外持续存在的运行时配置问题
  • dockerd停止后,擦除
    /var/lib/docker
    ,这将销毁所有容器、映像和卷(因此先备份),然后开始清理

  • 您运行什么命令来获取该错误?我做了一个构建并运行了
    程序输出。真的吗?我实际上是在构建和运行可执行文件
    gigem
    ,这太奇怪了。docker以前从未遇到过这种情况。请尝试另一台计算机,仔细检查您的基本映像,清除/var/lib/docker(所有映像、卷和容器都存储在那里,因此请先备份),然后/或重新启动。我见过层的周期性损坏,但幸运的是这很少见。所以,你是对的。我重新启动了我的机器,一切正常。这太奇怪了。奇怪的是,go在
    $PATH
    中。这使得这更奇怪。我决定在容器中运行bash,并尝试手动调用可执行文件。它返回
    standard\u init\u linux.go:178:exec用户进程导致“exec格式错误”
    。因此,我认为二进制文件在构建时的格式不正确。这可能是一个针对macOS体系结构的卷和它试图构建的bug(因为我正在使用Docker for Mac)?我重建了映像,进入了一个交互式bash会话,运行go build,然后手动启动它,它成功了/你是在docker build后运行的吗?pull??
    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"]