duanhuancong1969 2018-04-29 13:05
浏览 1861
已采纳

使用Docker时在Goland中配置GOROOT

I am building a Go project with Docker in the new GoLand IDE. Unfortunately, I am not able to cofigure my GOROOT correctly, making it not possible to use the GoLand futures to the max.

I have the following 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

I now execute my project as follows:

  1. docker build -t project-name .
  2. docker run -it -v ~/project-dir:/go/src/github.com/Name/ProjectName/app

This works, however, I cannot find how I can configure GoLand to use the path on my Docker image usr/local/go/bin for my GoRoot, is that even possible in GoLand? (If not, why even bother adding 'docker support'?)

  • 写回答

1条回答 默认 最新

  • duan19750503 2018-04-29 13:58
    关注

    As of 2018.1.2, it's impossible to use GoLand to develop Go applications that have their source code inside containers. The source code of your application, its dependencies, and Go itself need to be installed on your machine.

    If anyone has any idea on how to improve the Docker based development support, suggestions are welcomed, see: https://youtrack.jetbrains.com/issue/GO-3322

    As for why even bother adding support for Docker in the IDE? You can launch containers, you can use docker compose, and a host of other tools from the IDE. However, with the way containers work, there is no way for the IDE to get the source from the container and infer them.

    Furthermore, your container should not include the Go sources/workspace in the final container, so that it's optimized for size and deployment speed. You can use something like this to run, but be aware that additional work may be required.

    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘