Ошибка сборки Go + go-oci8 с докером в WSL2

Я создаю проект Go и пытаюсь подключить существующую удаленную базу данных Oracle с помощью go-oci8. Среда wsl2 в окне 10. Я использую Oracle Instant Client 21.1. Мой адрес oci8.pc:

/usr/lib/pkgconfig

Мой файл oci8.pc:

prefix=/opt/oracle/instantclient_21_1
exec_prefix=${prefix}
libdir=${prefix}
includedir=${prefix}/sdk/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: oci8
Description: oci8 library
Libs: -L${libdir} -lclntsh
Cflags: -I${includedir}
Version: 21.1

Мой докерфайл:

# Dockerfile
FROM golang:latest AS builder
ENV GO111MODULE=on

# Download modules
WORKDIR $GOPATH/src/github.com/hadeshunter/todo
COPY go.mod go.sum ./
RUN go mod download

# Build
COPY . ./
RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix nocgo -o /todo .

# Run
FROM scratch
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /todo ./
EXPOSE 5000
ENTRYPOINT ["./todo"]

Мой ~/.zshrc, я добавляю

export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/opt/oracle/instantclient_21_1:$LD_LIBRARY_PATH

Я использую команду запуска

иди беги main.go

Все есть успех. Но при запуске сборки с докером

docker-compose build && docker-compose run --rm --service-ports todo

Я получаю сообщение об ошибке:

# pkg-config --cflags  -- oci8
Package oci8 was not found in the pkg-config search path.
Perhaps you should add the directory containing `oci8.pc'
to the PKG_CONFIG_PATH environment variable
No package 'oci8' found
pkg-config: exit status 1
ERROR: Service 'todo' failed to build : The command '/bin/sh -c CGO_ENABLED=1 GOOS=linux go build -a -installsuffix nocgo -o /todo .' returned a non-zero code: 2

Кто-нибудь дает мне предложение, пожалуйста?


person Trí Huỳnh    schedule 10.12.2020    source источник
comment
вам нужно настроить это в контейнере докера. Вы можете запустить pkg-config --variable pc_path pkg-config, чтобы получить местоположения. Вы можете использовать эту инструкцию в своем файле докера, чтобы настроить переменную среды ENV PKG_CONFIG_PATH [path], этот вопрос тесно связан stackoverflow.com/questions/47407093/   -  person mh-cbon    schedule 10.12.2020
comment
неясно, когда вы говорите my zhrc или my system, если вы говорите о хост-машине или о контейнерной машине.   -  person mh-cbon    schedule 10.12.2020
comment
Если вы хотите упростить себе задачу, проверьте, есть ли чистый драйвер Go для оракула, соответствующий вашим требованиям. Если вы используете чистый драйвер Go, CGO не требуется и, вероятно, не требуется никаких других действий по установке и настройке. Вот один из них, о котором я знаю: github.com/sijms/go-ora   -  person TehSphinX    schedule 10.12.2020
comment
@ mh-cbon Спасибо, я попробую. Как видите, этот связанный с этим вопрос существует уже давно, и на него нет четкого ответа.   -  person Trí Huỳnh    schedule 10.12.2020
comment
@TehSphinX Спасибо, я искал довольно много статей и едва нашел понятный драйвер Pure Go Oracle. Надеюсь, что этот пакет будет в порядке.   -  person Trí Huỳnh    schedule 10.12.2020
comment
@TríHuỳnh, да, я думаю, что это довольно новое. Недавно я видел статью об этом в Golang Weekly, и она привлекла мое внимание. Несколько лет назад я помогал установить соединение с оракулом с помощью github.com/mattn/go-oci8, и это было сложно. Не обвиняя репозиторий mattn, просто дополнительное препятствие GCO делает его намного сложнее. Вот выпуск Golang Weekly: golangweekly.com/issues/336   -  person TehSphinX    schedule 10.12.2020
comment
@TríHuỳnh Спасибо, что сообщили мне, так как у меня еще не было возможности поиграть с ним самому.   -  person TehSphinX    schedule 11.12.2020