我在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
找不到。
答案 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 $ PATH
和which go
会告诉您二进制文件go
是否在PATH中
答案 1 :(得分:0)
从评论中,我自己测试了这段代码而没有错误(诚然在17.06-rc2,但行为不应该改变)。鉴于重新启动解决了这个问题,似乎在docker内部存在一些需要反弹才能纠正的腐败(虽然很少见,但这不是我第一次看到这个)。对于其他遇到问题的人,我想按顺序尝试以下方法:
/var/lib/docker
会破坏所有容器,图像和卷(首先备份)并开始清理