在使用docker时,在Goland中配置GOROOT

3

我正在使用新的GoLand IDE和Docker构建一个Go项目。不幸的是,我无法正确配置我的GOROOT,这使得无法充分利用GoLand的功能。

我有以下dockerfile:

FROM golang:1.9.3

# allows app_env to be set during build (defaults to empty string)
ARG app_env
# sets an environment variable to app_env argument, this way the variable will persist in the container for use in code
ENV APP_ENV $app_env


COPY ./ /go/src/github.com/Name/ProjectName/

WORKDIR /go/src/github.com/Name/ProjectName/app

# install all dependencies
RUN go get ./...

# build the binary
RUN go build

# Put back once we have an application
RUN app

EXPOSE 8080

我现在按照以下步骤执行我的项目:
  1. docker build -t project-name .
  2. docker run -it -v ~/project-dir:/go/src/github.com/Name/ProjectName/app
这是可以运行的,但我找不到如何配置GoLand使用Docker镜像上的路径usr/local/go/bin作为我的GoRoot,这在GoLand中是否可能?(如果不可能,为什么要添加“docker支持”?)
1个回答

2
截至2018年1月2日,无法使用GoLand开发源代码位于容器内的Go应用程序。您的应用程序源代码、其依赖项和Go本身需要安装在您的计算机上。
如果有人对如何改进基于Docker的开发支持有任何想法,请提出建议,参见:https://youtrack.jetbrains.com/issue/GO-3322 至于为什么要在IDE中添加Docker支持?您可以从IDE中启动容器,使用docker compose以及一系列其他工具。但是,由于容器的工作方式,IDE无法获取容器中的源代码并进行推断。
此外,您的容器不应包含Go源代码/工作区,以便优化大小和部署速度。您可以使用类似于这样的方法运行,但请注意可能需要额外的工作。
FROM golang:1.9.3 as build-env

# allows app_env to be set during build (defaults to empty string)
ARG app_env
# sets an environment variable to app_env argument, this way the variable     will persist in the container for use in code
ENV APP_ENV $app_env

COPY ./ /go/src/github.com/Name/ProjectName/

WORKDIR /go/src/github.com/Name/ProjectName/app

# install all dependencies
RUN go get ./...

# build the binary
RUN go build -o /my_app

# final stage
FROM scratch

COPY --from=build-env /my_app /

# Put back once we have an application
CMD ["/my_app"]

EXPOSE 8080

1
谢谢您的帮助!只是想知道:为什么JetBrains选择不让这成为可能? - hY8vVpf3tyR57Xib
不幸的是,这确实不是我们可以修复的问题。我们无法访问容器内部的文件,除非进行类似SSH桥接或类似操作。而且这并不是一个良好的开发体验,也不能使用最小化的Docker容器。 - dlsniper
@dlsniper 在 PyCharm 中构建 Docker 容器有很好的支持。你能否提供类似这样的东西?我假设在 PyCharm 中它使用挂载 src 目录的方式工作。 - Kevin Wittek
我们仍在探索如何使用Docker容器进行开发,请查看我的回复中的票证。就个人而言,我不明白为什么有人要在Docker容器内进行实际开发,使用git、各种go工具,并从那里提交代码。这与容器应该具有的一切相悖,它们被用作虚拟机而不是容器。话虽如此,在这种情况下,我的意见并不重要,当我们弄清楚如何支持这种情况时,我们将更新票证。希望这可以帮到你。 - dlsniper
3
这没什么意义。PHPStorm(另一个Jet Brains应用程序)有一个选项可以从正在运行的docker容器中加载PHP。它从容器中加载PHP,所以您不需要在主机上安装PHP。然后,PHPStorm会查找/推断运行容器中的所有PHP库。我不确定是如何实现的,也许它映射了一个docker卷。GoLand可以尝试像PHP Storm那样做。 - b01

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接