第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 項目在 docker 容器中運行時找不到依賴項

golang 項目在 docker 容器中運行時找不到依賴項

Go
湖上湖 2021-12-20 19:19:36
我有這個 golang 沙箱項目:https : //github.com/cflynn07/golang-db-gateway-example當我嘗試gateway/gateway.go在一個golang:1.6.0-alpine~/g/s/g/c/golang-db-gateway-example git:master ??? docker-compose up gatewaymysql_server is up-to-dateStarting gatewayAttaching to gatewaygateway | gateway.go:7:2: cannot find package "github.com/go-sql-driver/mysql" in any of:gateway |   /usr/local/go/src/github.com/go-sql-driver/mysql (from $GOROOT)gateway |   /go/src/github.com/go-sql-driver/mysql (from $GOPATH)gateway | gateway.go:8:2: cannot find package "github.com/gorilla/mux" in any of:gateway |   /usr/local/go/src/github.com/gorilla/mux (from $GOROOT)gateway |   /go/src/github.com/gorilla/mux (from $GOPATH)gateway exited with code 1為什么構(gòu)建步驟沒有檢測/example/vendor文件夾內(nèi)我的項目的依賴項?當我go run gateway/gateway.go從我的主機操作系統(tǒng)運行時,該命令有效。目錄結(jié)構(gòu)(安裝在容器內(nèi) /example)~/g/s/g/c/golang-db-gateway-example git:master ??? tree -L 3.├── README.md├── client│   └── client.go├── docker-compose.yml├── gateway│   └── gateway.go├── glide.lock├── glide.yaml├── tmp└── vendor    └── github.com        ├── go-sql-driver        └── gorilla相關(guān)文件:docker-compose.ymlmysql:  container_name: mysql_server  image: mysql:5.7.11  environment:    - MYSQL_ROOT_PASSWORD=root  ports:    - 3306gateway:  container_name: gateway  image: golang:1.6.0-alpine  volumes:    - ./:/example  working_dir: /example/gateway  command: go run gateway.go  environment:    - MYSQL_ROOT_PASSWORD=root    - MYSQL_DATABASE=sandbox  links:    - mysql網(wǎng)關(guān)/gateway.gopackage mainimport (    "database/sql"    "encoding/json"    "fmt"    _ "github.com/go-sql-driver/mysql"    "github.com/gorilla/mux"    "net/http"    "os")var db *sql.DBfunc main() {    r := mux.NewRouter()    var e error    db, e = sql.Open(        "mysql", os.ExpandEnv("root:${MYSQL_SERVER_PASSWORD}@mysql_server:3306/${MYSQL_DATABASE}"))    fmt.Print("error is", e)    r.HandleFunc("/todos", getTodos).Methods("GET")    http.ListenAndServe(":8080", r)    fmt.Printf("gateway")}
查看完整描述

3 回答

?
慕田峪4524236

TA貢獻1875條經(jīng)驗 獲得超5個贊

實際上,您成功地運行了 Go 服務(wù)器。它沒有掛起,只是在等待連接。由于一些怪癖,沒有輸出:它沒有嘗試連接到數(shù)據(jù)庫,并且日志語句被緩沖。


嘗試修改 gateway.go main:


func main() {

    log.Println("Starting main...")


    conn := os.ExpandEnv("root:${MYSQL_SERVER_PASSWORD}@mysql_server:3306/${MYSQL_DATABASE}")


    var err error

    db, err = sql.Open("mysql", conn)

    if err != nil {

        log.Fatal(err)

    }


    log.Println("pinging", conn)

    if err := db.Ping(); err != nil {

        log.Fatal(err)

    }


    r := mux.NewRouter()

    r.HandleFunc("/todos", getTodos).Methods("GET")


    listen := ":8080"

    log.Printf("Listening on %s\n", listen)

    log.Fatal(http.ListenAndServe(listen, r))

}

運行這個版本給出:


$ docker-compose up gateway

mysql_server is up-to-date

Starting gateway

Attaching to gateway

gateway | 2016/03/15 10:58:05 Starting main...

gateway | 2016/03/15 10:58:05 pinging root:@mysql_server:3306/sandbox

gateway | 2016/03/15 10:58:05 default addr for network 'mysql_server:3306' unknown

gateway | exit status 1

gateway exited with code 1

你應(yīng)該很高興從那里出發(fā)。筆記:

  • docker-compose 似乎緩沖標準輸出直到換行

  • 日志功能,例如 log.Print 添加換行符,fmt.Print 不會

  • sql.Open 不連接到數(shù)據(jù)庫,使用 sql.Ping (see wiki )

  • 缺少 MYSQL_SERVER_PASSWORD

  • 缺少 mysql 連接字符串的網(wǎng)絡(luò)類型(參見示例

  • 也啟動mysql服務(wù)器

  • 需要創(chuàng)建新的或安裝現(xiàn)有的數(shù)據(jù)庫“沙箱”


查看完整回答
反對 回復(fù) 2021-12-20
?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

在我看來,這里的主要問題似乎是您沒有提前構(gòu)建 Go 程序??雌饋砟呀?jīng)將 Go 源文件放在 Docker 容器中,并且您依賴于go run構(gòu)建然后運行程序。


我想你能做到嗎?這是非常腳本語言風(fēng)格的方式。


但是,我認為最好的方法是提前構(gòu)建 Go 應(yīng)用程序。


(請注意,對于以下內(nèi)容,我改編了現(xiàn)有的 makefile 代碼,但實際上并沒有運行它。)

例如,您可以像這樣構(gòu)建它:


CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -installsuffix netgo -o ./gateway/gateway ./gateway

然后,假設(shè)您不需要該容器中的其他內(nèi)容,您可以使用 Dockerfile 構(gòu)建 Docker 映像,例如:


FROM scratch

ENTRYPOINT ["/gateway"]

ADD ./gateway/gateway /gateway

結(jié)果是一個簡單的、小的(大約 8 MB)容器,其中包含一個靜態(tài)鏈接的可執(zhí)行文件。


查看完整回答
反對 回復(fù) 2021-12-20
?
慕雪6442864

TA貢獻1812條經(jīng)驗 獲得超5個贊

首先 - 需要更改${MYSQL_SERVER_PASSWORD}on ${MYSQL_ROOT_PASSWORD},因為環(huán)境只有MYSQL_ROOT_PASSWORD變量。

其次 - 這是錯誤的@mysql_server:3306,正確的是@tcp(mysql_server:3306)能夠通過 TCP 連接到 MySQL。

conn := os.ExpandEnv("root:${MYSQL_ROOT_PASSWORD}@tcp(mysql_server:3306)/${MYSQL_DATABASE}")

一切都會好起來的,唯一的問題可能是數(shù)據(jù)庫初始化時需要在運行主程序之前暫停。有幾種方法可以解決這個問題,這里有幾種方法https://docs.docker.com/compose/startup-order/


查看完整回答
反對 回復(fù) 2021-12-20
  • 3 回答
  • 0 關(guān)注
  • 250 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號