The `golang` container image sets the GOPATH directory to /go and the 
working directory to /go too.
Following GOPATH layout, source code is expected to be in directories under 
/go/src.
`/go/bin` is where binaries are installed by default, and `/go/pkg` include 
things like the module cache.
With modules, it is entirely possible to work outside of the GOPATH (as you 
most likely are doing).
In which case, a common pattern is to choose your own working directory,
eg `WORKDIR /workspace` and work in there.

On Friday, February 11, 2022 at 7:51:00 PM UTC+1 davidmic...@gmail.com 
wrote:

> I had earlier written a note about troubles refactoring my project to have 
> a "src" directory, but I've backed off on that for now.  I see that the 
> main problem I saw with that hasn't changed when backing out those changes. 
> It appears that running this build inside a docker image seems to be 
> somehow causing this problem.
>
> In any case, I have a relatively simple go application with main.go, 
> go.mod, and go.sum in the root directory, with subdirectories containing 
> other source files in packages.
>
> When I just run "go build ..." from the command line in the root directory 
> of my project, it works fine and produces a working executable.
>
> However, I'm trying to get this build to work within a published go 
> "builder" image, which I will use as the first stage in a multi-stage 
> Docker build.
>
> I will first state that this has something to do with GOPATH, and I've 
> gone through 
> https://www.digitalocean.com/community/tutorials/understanding-the-gopath 
> , but I'd have to say that I still don't understand its proper role here.
>
> Not sure what you would want to see first, but here's a plain "ls" of the 
> root directory of my project:
> -------------------------
> ./         Dockerfile        go.mod           Jenkinsfile        README.md
> ../         .dockerignore        go.sum           lib/               
>  target/
> app/         .git/                handlers/  main.go        trustStore/
> config/  .gitignore        include/   Makefile        funcs/
> -----------------------
>
> Just running "make build" does this:
> ---------------------
> CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o 
> ../target/dist/linux-amd64
> ---------------------
>
> Which is fine.
>
> My "dockerbuild" target in the Makefile is this:
> --------------------
> dockerbuild:
>         docker build \
>                 --build-arg host_src_path=. \
>                 --build-arg packages=. \
>                 --build-arg executable_name=appgo \
>                 --build-arg cgo_enabled_01=1 \
>                 --build-arg goos=linux \
>                 --build-arg goarch=amd64 \
>                 -f Dockerfile -t appgo .
> -----------------------
>
> My Dockerfile, before the start of the second build stage, is this:
> ----------------------------
>         FROM .../golang:1.17.6-bullseye as go-builder
>
>         ARG packages
>         ARG executable_name
>         ARG host_src_path
>         ARG cgo_enabled_01
>         ARG goos
>         ARG goarch
>
>         COPY $host_src_path .
>         RUN env
>         RUN ls -lt
>         RUN ls -lt $GOPATH
>         #RUN go mod download
>
>         RUN CGO_ENABLED=$cgo_enabled_01 GOOS=$goos GOARCH=$goarch go build 
> -o $executable_name $packages
> --------------------
>
> When I run "make dockerbuild", I see this:
> ------------------
>         Sending build context to Docker daemon  125.8MB
>         Step 1/19 : FROM .../golang:1.17.6-bullseye as go-builder
>          ---> 80d9a75ccb38
>         Step 2/19 : ARG packages
>          ---> Using cache
>          ---> d98015e225b1
>         Step 3/19 : ARG executable_name
>          ---> Using cache
>          ---> 1d336ac5cf1b
>         Step 4/19 : ARG host_src_path
>          ---> Using cache
>          ---> 59595b09a376
>         Step 5/19 : ARG cgo_enabled_01
>          ---> Using cache
>          ---> 3c4c08392ede
>         Step 6/19 : ARG goos
>          ---> Using cache
>          ---> 6ed0d6881fb4
>         Step 7/19 : ARG goarch
>          ---> Using cache
>          ---> 9e4b94e86b09
>         Step 8/19 : COPY $host_src_path .
>          ---> 4727e2fc3e80
>         Step 9/19 : RUN env
>          ---> Running in 8fcedaa86227
>         HOSTNAME=8fcedaa86227
>         HOME=/root
>         packages=.
>         cgo_enabled_01=1
>         goarch=amd64
>         host_src_path=.
>         
> PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
>         goos=linux
>         GOPATH=/go
>         executable_name=appgo
>         PWD=/go
>         GOLANG_VERSION=1.17.6
>         Removing intermediate container 8fcedaa86227
>          ---> 46e44a5a3539
>         Step 10/19 : RUN ls -lt
>          ---> Running in 75107286d337
>         total 128
>         -rw-rw-r-- 1 root root   635 Feb 11 18:37 Dockerfile
>         -rw-rw-r-- 1 root root   737 Feb 11 18:29 Makefile
>         -rw-rw-r-- 1 root root   131 Feb 10 18:59 Jenkinsfile
>         drwxrwxrwx 2 root root  4096 Jan 27 10:09 bin
>         drwxrwxrwx 2 root root  4096 Jan 27 10:09 src
>         -rw-rw-r-- 1 root root   967 Jan 13 18:34 main.go
>         drwxrwxr-x 3 root root  4096 Jan 11 23:46 target
>         drwxrwxr-x 2 root root  4096 Jan 11 23:46 funcs
>         drwxrwxr-x 3 root root  4096 Jan 11 21:06 trustStore
>         -rw-rw-r-- 1 root root  1454 Jan 11 21:06 README.md
>         drwxrwxr-x 2 root root  4096 Jan 11 21:06 app
>         drwxrwxr-x 2 root root  4096 Jan 11 21:06 config
>         -rw-rw-r-- 1 root root   806 Jan 11 21:06 go.mod
>         -rw-rw-r-- 1 root root 65194 Jan 11 21:06 go.sum
>         drwxrwxr-x 2 root root  4096 Jan 11 21:06 handlers
>         drwxrwxr-x 3 root root  4096 Jan 11 21:06 include
>         drwxrwxr-x 4 root root  4096 Jan 11 21:06 lib
>         Removing intermediate container 75107286d337
>          ---> a880f28ef2b2
>         Step 11/19 : RUN ls -lt $GOPATH
>          ---> Running in 220d4e8dbb33
>         total 128
>         -rw-rw-r-- 1 root root   635 Feb 11 18:37 Dockerfile
>         -rw-rw-r-- 1 root root   737 Feb 11 18:29 Makefile
>         -rw-rw-r-- 1 root root   131 Feb 10 18:59 Jenkinsfile
>         drwxrwxrwx 2 root root  4096 Jan 27 10:09 bin
>         drwxrwxrwx 2 root root  4096 Jan 27 10:09 src
>         -rw-rw-r-- 1 root root   967 Jan 13 18:34 main.go
>         drwxrwxr-x 3 root root  4096 Jan 11 23:46 target
>         drwxrwxr-x 2 root root  4096 Jan 11 23:46 funcs
>         drwxrwxr-x 3 root root  4096 Jan 11 21:06 trustStore
>         -rw-rw-r-- 1 root root  1454 Jan 11 21:06 README.md
>         drwxrwxr-x 2 root root  4096 Jan 11 21:06 app
>         drwxrwxr-x 2 root root  4096 Jan 11 21:06 config
>         -rw-rw-r-- 1 root root   806 Jan 11 21:06 go.mod
>         -rw-rw-r-- 1 root root 65194 Jan 11 21:06 go.sum
>         drwxrwxr-x 2 root root  4096 Jan 11 21:06 handlers
>         drwxrwxr-x 3 root root  4096 Jan 11 21:06 include
>         drwxrwxr-x 4 root root  4096 Jan 11 21:06 lib
>         Removing intermediate container 220d4e8dbb33
>          ---> 76c8e73bc8e8
>         Step 12/19 : RUN CGO_ENABLED=$cgo_enabled_01 GOOS=$goos 
> GOARCH=$goarch go build -o $executable_name $packages
>          ---> Running in 28a92ca3224d
>         $GOPATH/go.mod exists but should not
>         The command '/bin/sh -c CGO_ENABLED=$cgo_enabled_01 GOOS=$goos 
> GOARCH=$goarch go build -o $executable_name $packages' returned a non-zero 
> code: 1
>         make: *** [Makefile:11: dockerbuild] Error 1
> --------------------
>
> There are a few things to note here, starting with the error message at 
> the end:
> ------------------
> $GOPATH/go.mod exists but should not
> ------------------
>
> Outside of my Docker container, $GOPATH is basically ~/go, and it just 
> contains directories "bin" and "pkg".  However, inside the container, 
> $GOPATH has all the code for my project, including the "go.mod" file, so at 
> least the first part of that error message is accurate, but I don't 
> understand the significance of that, or what I'm supposed to do to resolve 
> this.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/db777eaa-1116-4df0-a4be-2c07ad20bab4n%40googlegroups.com.

Reply via email to