Golang docker库映像在$PATH中找不到go工具
我在上打开了一个问题,因为我认为这是一个bug。然而,我想我也应该在StackOverflow上询问,看看是否有其他人(除了项目贡献者)遇到过这种情况或有什么想法 首先,版本号: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
$ 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内部似乎出现了一些需要反弹来纠正的损坏(虽然很少见,但这不是我第一次看到这种情况)。对于将来遇到问题的其他人,我想按顺序尝试一下:
/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"]