【问题标题】:How correctly set up third-party libraries of golang application with the help of docker compose?如何在 docker compose 的帮助下正确设置 golang 应用的第三方库?
【发布时间】:2019-03-11 05:10:57
【问题描述】:

我正在尝试在 docker compose 的帮助下部署我的 Golang 应用程序。

在 CentOS 服务器中文件夹的层次结构:

docker_app
 - src
   - app
     - docker-compose.yml
     - main.go

这个 Golang 应用程序使用了几个第三方库:

  • Gorilla Mux;

  • 大猩猩处理程序;

  • pq;

  • godotenv;

  • GORM;

  • 神器。

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镜像和容器的名称?

是否可以在Windows 10 上创建go.mod 文件?

当我在 Powershell 中运行 $Env:GOOS = "linux"; $Env:GOARCH = "amd64"; go build 命令时,它会引发错误:

【问题讨论】:

  • 不要发布文本的屏幕截图。而是将文本直接复制并粘贴到问题中。

标签: docker go docker-compose


【解决方案1】:

是否可以在 Windows 10 上创建 go.mod 文件?

可以,只要你有Go 1.11/1.12

但要将其与 docker-compose 一起使用,您可以关注 Miłosz Smół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 工具链(和特殊的环境变量集 相应地),或本地环境(这更容易,恕我直言)。

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

【讨论】:

  • callicoder.com/… 中的相同想法
  • 您好!谢谢你的链接。让我试着解释一下我现在在做什么。我在 Windows 10 中创建了这个应用程序。当我尝试在 Windows 10 中创建 go.mod 文件时,我看到这样的错误:go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'。看来我需要在 CentOS 服务器上发出这个命令,对吧?!
  • @NurzhanNogerbek 是的,或者您可以直接在 Windows 10 中编译,但需要交叉编译 (stackoverflow.com/a/50912419/6309)。您可以查看reddit.com/r/golang/comments/alrnuk/…
  • 我很困惑。我是否明白在Dockerfile 我需要安装所有第三方库?例如RUN go get github.com/gorilla/mux 而不是RUN go get github.com/cespare/reflex?据我所知go get 命令需要 git,对吗?我需要在Dockerfile 中安装git 吗?
  • @NurzhanNogerbek 如果您正在构建一个包含go.mod 的项目(在go mod init 之后),您不需要获取任何东西:go build 将为您获取依赖项.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
相关资源
最近更新 更多