我正在尝试在docker compose的帮助下部署 Golang 应用。
在CentOS服务器中,文件夹的层次结构:
docker_app
- src
- app
- docker-compose.yml
- main.go
此Golang应用程序使用多个第三方库:
Gorilla Mux;
大猩猩处理程序;
pq;
godotenv;
GORM;
goracle。
docker-compose.yml :
version: '2'
services:
app:
image: golang:1.11-alpine
volumes:
- .:/go/src/app
working_dir: /go/src/app
command: go run main.go
当我尝试运行docker-compose up
项目时,它会引发错误:
Attaching to app_app_1
app_1 | main.go:4:2: cannot find package "github.com/gorilla/handlers" in any of:
app_1 | /usr/local/go/src/github.com/gorilla/handlers (from $GOROOT)
app_1 | /go/src/github.com/gorilla/handlers (from $GOPATH)
如您所见,我需要设置第三方库。如何正确制作?还有如何在docker compose的帮助下设置未来的docker映像和容器的名称?
是否可以在go.mod
上创建Windows 10
文件?
当我在Powershell中运行$Env:GOOS = "linux"; $Env:GOARCH = "amd64"; go build
命令时,它会引发错误:
答案 0 :(得分:2)
是否可以在Windows 10上创建go.mod文件?
是的,只要您有Go 1.11/1.12
但是要在docker-compose中使用它,可以遵循MiłoszSmółka的“ Go Docker dev environment with Go Modules and live code reloading”
他使用一个Dockerfile进行编译:
FROM golang:1.11.2-stretch
RUN go get github.com/cespare/reflex
COPY reflex.conf /
ENTRYPOINT ["reflex", "-c", "/reflex.conf"]
然后由一个docker-compose来执行,挂载已编译的可执行文件,以及*和Go module cache:
version: '3'
services:
publisher:
build: .
volumes:
- ./publisher:/app
- $GOPATH/pkg/mod/cache:/go/pkg/mod/cache
working_dir: /app
env_file:
- .env
ports:
- 5000:5000
关于go-goracle/goracle
,issue 59详细信息的交叉编译问题:
goracle需要CGO才能在Oracle OCI库中进行编译。
因此,需要使用交叉编译的C工具链(以及特殊的env vars设置) 相应地)或本地环境(更简单,恕我直言)。
含义:不要尝试从Windows交叉编译它,而是直接使用正确的操作系统(通过Linux VM,在Windows 10 HyperV environment中)在Dockerfile中完成它。