I'm trying to build my app which contains go-sqlite3 by docker.
main.go
package main
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
)
func main() {
sql.Open("sqlite3", "test.db")
}
Dockerfile
FROM golang:alpine
RUN apk add --no-cache git
RUN apk add --no-cache sqlite-libs sqlite-dev
RUN apk add --no-cache build-base
WORKDIR /go/src/app
COPY *.go ./
RUN go-wrapper download
RUN go-wrapper install
I use this command to copy the compiled program out to my host OS (Arch Linux).
docker build -t mygo .
docker run --rm -v $$PWD:/usr/src/app mygo /bin/cp /go/bin/app /usr/src/app
The problem is the compiled program is missing dynamic library
$ ldd app
...
libc.musl-x86_64.so.1 => not found
What I expected is like
$ ldd app
not a dynamic executable
refer to how to create a statically linked golang executable with go 1.5+
Change the Dockerfile's go-wrapper install
line into
RUN go-wrapper install -ldflags "-linkmode external -extldflags -static"
If I correctly understood your problem it depends on how you build the Golang executable.
You should build your package with CGO_ENABLED
set to 0
. In order to do that, before compiling, simply run export CGO_ENABLED=0
on your terminal than build your Golang binary.
If you are interested you can find more info about CGO
here