[英]Golang docker library image cannot find go tool in $PATH
我在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
找不到go。
我最近測試了您的Dockerfile和main.go,但沒有發現任何錯誤。
我認為您應該嘗試使用docker build --pull .
再次拉出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
,如果二進制文件go
在Echo $ PATH
, which go
會顯示給您
從注釋中,我自己測試了此代碼,沒有錯誤(公認的是在17.06-rc2上,但是行為不應更改)。 鑒於重啟解決了這個問題,碼頭工人內部似乎出現了一些損壞,需要反彈來糾正(雖然很少見,但這不是我第一次看到它)。 對於將來遇到問題的其他人,我喜歡按以下順序嘗試:
/var/lib/docker
docker,這將銷毀所有容器,圖像和卷(因此請先備份)並開始清理
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.