我想做的事
我想為 Go 設定 docker dev 環境。
代碼
// directory
project(absolute path: /Uses/[username]/project)
|--- app
| |--- config
| | |___ config.go
| |--- main.go
| |___ config.ini
|--- docker-compose.yml
|___ Dockerfile
// main.go
package main
import (
"app/config"
"fmt"
)
func main() {
fmt.Println("Hello World")
fmt.Println(config.Config.ApiKey)
fmt.Println(config.Config.ApiSecrete)
}
// docker-compose.yml
version: '3.8'
services:
app:
build: .
tty: true
volumes:
- ./app:/go/src/app
// Dockerfile
FROM golang:latest
RUN mkdir /go/src/app
WORKDIR /go/src/app
ENV GO111MODULE=on
ENV GOPATH /go
ADD ./app /go/src/app/
開發環境
當我跑步時docker-compose exec app go env,我得到
GOPATH="/go"
GOROOT="/usr/local/go"
問題
當我跑步時docker-compose up -d --build,我得到了
package app/config is not in GOROOT (/usr/local/go/src/app/config)。所以,我不能匯入"app/config"的main.go檔案。
我想知道我在用docker設定GO dev環境時如何匯入自制包。
uj5u.com熱心網友回復:
您可以按照go-env-series了解如何使用 Docker 在代碼中定義您的 Go 開發環境。
例子:chris-crone/containerized-go-dev
在第二篇文章中未提到go mod init,這有助于與匯入路徑:
讓我們使用以下命令使當前目錄成為模塊的根目錄
go mod init:$ go mod init example.com/hello go: creating new go.mod: module example.com/hello該
go.mod檔案僅出現在模塊的根目錄中。子目錄中的包具有由模塊路徑加上子目錄路徑組成的匯入路徑。
例如,如果我們創建了一個子目錄 world,我們就不需要(也不想)在
go mod init那里運行。
該包將被自動識別為example.com/hello模塊的一部分,具有匯入路徑example.com/hello/world。
uj5u.com熱心網友回復:
謝謝你,我已經解決了這個問題,所以我會分享。
我跑go mod init app,和go mod tidy。
然后,我將 Dockerfile 更改為 set GO111MODULE=on。
version: '3.8'
services:
app:
build: .
tty: true
volumes:
- ./app:/go/src/app
environment:
- "GO111MODULE=on"
// directory
project(absolute path: /Uses/[username]/project)
|--- app
| |--- config
| | |___ config.go
| |--- main.go
| |--- config.ini
| |--- go.mod
| |___ go.sum
|--- docker-compose.yml
|___ Dockerfile
參見 1 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/346245.html
標籤:码头工人 走 docker-compose
