Я создаю проект 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
Кто-нибудь дает мне предложение, пожалуйста?
pkg-config --variable pc_path pkg-config
, чтобы получить местоположения. Вы можете использовать эту инструкцию в своем файле докера, чтобы настроить переменную средыENV PKG_CONFIG_PATH [path]
, этот вопрос тесно связан stackoverflow.com/questions/47407093/ - person mh-cbon   schedule 10.12.2020my zhrc
илиmy system
, если вы говорите о хост-машине или о контейнерной машине. - person mh-cbon   schedule 10.12.2020Golang Weekly
, и она привлекла мое внимание. Несколько лет назад я помогал установить соединение с оракулом с помощьюgithub.com/mattn/go-oci8
, и это было сложно. Не обвиняя репозиторий mattn, просто дополнительное препятствие GCO делает его намного сложнее. Вот выпуск Golang Weekly: golangweekly.com/issues/336 - person TehSphinX   schedule 10.12.2020