docker 執行 go語言二進位制程式
阿新 • • 發佈:2018-12-02
1、創件dockerfile檔案命名為“Dockerfile.scratch"
# 使用scratch開啟
FROM scratch
# 拷貝編譯程式
COPY main main
# 開啟8080埠
EXPOSE 8080
# 執行!
CMD ["./main"]
2、使用go程式編寫一個web服務
package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello world!") } func main() { http.HandleFunc("/", handler) fmt.Println("服務埠: 8080") http.ListenAndServe(":8080", nil) }
3、編譯程式、建立映象、執行服務
$ go build main.go
$ sudo docker build -t webserver -f Dockerfile.scratch .
$ sudo docker run webserver
standard_init_linux.go:190: exec user process caused "no such file or directory"
執行程式會報以上錯誤,原因是cgo需要libc庫,使用以下命令重新編譯執行:
$ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . $ sudo docker build -t webserver -f Dockerfile.scratch . $ sudo docker run -p 8080:8080 webserver 服務埠: 8080
成功開啟docker容器的 go web服務