Какой пакет мне следует установить вместо libpcre ++ - dev, чтобы использовать код C в Alpine Golang?

У меня есть программа Golang внутри контейнера докеров (я использую Ubuntu 18). Также я использую github.com/glenn-brown/golang-pkg -pcre / src / pkg / pcre для регулярного выражения в моем приложении Golang. Перед использованием этой библиотеки я должен установить libpcre++-dev следующим образом:

sudo apt-get install libpcre ++ - dev

Но я использую golang: alpine в моем Dockerfile, а это не libpcre++-dev библиотека в пакетах alpine.

Какой пакет мне следует установить вместо libpcre++-dev?

p.s. Я пытался установить libc6-compat, pcre pcre-dev, libpcrecpp, но вижу эту ошибку:

github.com/glenn-brown/golang-pkg-pcre/src/pkg/pcre /go/pkg/mod/github.com/glenn-brown/[email protected]/src/ pkg / pcre / pcre.go: 52: 10: фатальная ошибка: pcre.h: нет такого файла или каталога #include ^ ~~~~~~~ компиляция прервана

Мой Dockerfile:

FROM golang:alpine

RUN apk update
RUN apk upgrade
RUN apk add --update --no-cache build-base gcc g++ pcre pcre-dev libc6-compat

# Install git + SSL ca certificates.
# Git is required for fetching the dependencies.
# Ca-certificates is required to call HTTPS endpoints.
RUN apk update && apk add --no-cache curl git ca-certificates tzdata \
 && update-ca-certificates 2> /dev/null || true

Я создаю свое приложение следующим образом:

- CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags="-w -s" -o bin/backend ./cmd/backend/main.go

ИЗМЕНИТЬ

Я изменил свой Dockerfile (добавьте строку ниже)

RUN apk add --update --no-cache build-base gcc g++ pcre pcre-dev libc6-compat

И вот у меня новая ошибка:

Ошибка при загрузке разделяемой библиотеки libpcre.so.1: нет такого файла или каталога (необходим / bin / backend)


person Klimbo    schedule 21.09.2019    source источник
comment
RUN apk add --virtual build-dependencies RUn apk add --no-cache build-base gcc попробуйте это или вы можете установить alpine sdk apk add --update alpine-sdk   -  person Adiii    schedule 21.09.2019
comment
@Adiii На последнем этапе (развертывание на сервере) у меня ошибка [20278] ВНУТРЕННЯЯ ОШИБКА: невозможно создать временный каталог!   -  person Klimbo    schedule 21.09.2019
comment
решает ли вышеперечисленное проблему?   -  person Adiii    schedule 21.09.2019
comment
github.com/docker/compose/issues/3262   -  person Adiii    schedule 21.09.2019
comment
@Adiii Я исправил [20278] INTERNAL ERROR: cannot create temporary directory!, но все равно получаю github.com/glenn-brown/golang-pkg-pcre/src/pkg/pcre /go/pkg/mod/github.com/glenn-brown/[email protected]/src/pkg/pcre/pcre.go:52:10: fatal error: pcre.h: No such file or directory #include ^~~~~~~~ compilation terminated   -  person Klimbo    schedule 21.09.2019
comment
вы можете задать другой вопрос, это другая проблема   -  person Adiii    schedule 21.09.2019
comment
@Adiii Это не другая проблема. У меня то же сообщение об ошибке, что и раньше   -  person Klimbo    schedule 21.09.2019
comment
Позвольте нам продолжить это обсуждение в чате.   -  person Adiii    schedule 21.09.2019
comment
pkgs.alpinelinux.org/packages может быть хорошей отправной точкой для поиска пакетов; есть ссылка на странице изображений Docker Hub alpine.   -  person David Maze    schedule 21.09.2019
comment
@DavidMaze Я знаю этот сайт и протестировал множество пакетов, но все они не работают   -  person Klimbo    schedule 21.09.2019


Ответы (2)


Вы можете попробовать один из них, так как оба пакета

RUN apk add --virtual build-dependencies 
RUn apk add --no-cache build-base gcc

build-essential - это метапакет (пакет, который устанавливает множество других пакетов, таких как g ++ и gcc: компиляторы GNU C и C ++).

Или вы можете установить alpine sdk.

Вы можете начать с alpine-sdk, который представляет собой «метапакет, в который входят наиболее важные пакеты, используемые для создания новых пакетов». http://wiki.alpinelinux.org/wiki/Developer_Documentation содержит дополнительную информацию.

RUN apk add --update alpine-sdk

docker-alpine-issues-24

Или вы можете использовать golang: latest, который будет работать нормально.

FROM golang:latest
RUN apt-get update 
RUN apt-get install libpcre++-dev -y
person Adiii    schedule 21.09.2019
comment
У меня ошибка: ошибка при загрузке общей библиотеки libpcre.so.3 - person Klimbo; 21.09.2019

Вместо этого вы можете использовать один из образов на основе Debian golang. В любом случае, к тому времени, когда вы установите GNU libc и полную цепочку инструментов C поверх этого, на самом деле не будет большой экономии места по сравнению с базовым образом Alpine. Вы можете (и должны) использовать многоступенчатую сборку, в которой окончательный образ содержит только ваш скомпилированный двоичный файл и может использовать базу Alpine.

Результат будет примерно таким:

# Build-time image; just has the parts needed to run `go build`
FROM golang:1.12-buster AS build

# Install additional build-time tools
RUN apt-get update \
 && apt-get install --assume-yes \
      build-essential ca-certificates git-core tzdata \
      libpcre++-dev

# Build your application
WORKDIR /app
COPY . .
ENV GO111MODULE=on
RUN go build -o myapp ./cmd/myapp

# Runtime image; has only what we need to run the application
FROM alpine:3.10
# Note that you'll need the shared library for libpcre++
RUN apk add ca-certificates tzdata libpcrepp
COPY --from=build /app/myapp /usr/bin/myapp
CMD ["myapp"]
person David Maze    schedule 21.09.2019
comment
У меня ошибка: ошибка при загрузке общей библиотеки libpcre.so.3 - person Klimbo; 21.09.2019