如何在docker compose的帮助下正确设置golang应用程序的第三方库?

时间:2019-03-11 05:10:58

标签: docker go docker-compose

我正在尝试在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命令时,它会引发错误:

enter image description here

1 个答案:

答案 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/goracleissue 59详细信息的交叉编译问题:

  

goracle需要CGO才能在Oracle OCI库中进行编译。
  因此,需要使用交叉编译的C工具链(以及特殊的env vars设置)   相应地)或本地环境(更简单,恕我直言)。

含义:不要尝试从Windows交叉编译它,而是直接使用正确的操作系统(通过Linux VM,在Windows 10 HyperV environment中)在Dockerfile中完成它。