Docker 我应该安装什么包而不是libpcre++-开发人员是否在Alpine Golang中使用C代码?

Docker 我应该安装什么包而不是libpcre++-开发人员是否在Alpine Golang中使用C代码?,docker,go,pcre,alpine,cgo,Docker,Go,Pcre,Alpine,Cgo,我在docker容器中有一个Golang程序(我使用Ubuntu18)。我还在Golang应用程序中使用正则表达式。在使用此库之前,我应该以以下方式安装libpcre++-dev: - CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags="-w -s" -o bin/backend ./cmd/backend/main.go sudo apt get安装libpcre++-dev 但我在Do

我在docker容器中有一个Golang程序(我使用Ubuntu18)。我还在Golang应用程序中使用正则表达式。在使用此库之前,我应该以以下方式安装
libpcre++-dev

- CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags="-w -s" -o bin/backend ./cmd/backend/main.go
sudo apt get安装libpcre++-dev

但我在Dockerfile中使用了golang:alpine,这不是alpine包中的
libpcre++-dev

我应该安装什么软件包而不是libpcre++-dev

p、 我已尝试安装
libc6 compat
pcre-pcre-dev
libpcrecpp
,但我发现此错误:

github.com/glenn-brown/golang-pkg-pcre/src/pkg/pcre /go/pkg/mod/github.com/glenn-brown/golang-pkg-pcre@v0.0.0-2012052223659-48bb82a8b8ce/src/pkg/pcre/pcre。go:52:10: 致命错误:pcre.h:没有此类文件或目录#包含 ^~~~~~~~~~编译已终止

我的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(在下面添加行)

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

现在我有一个新的错误:

加载共享库libpcre.so.1时出错:没有这样的文件或目录 (由/bin/backend所需)


您可以尝试其中的一个,因为这两个包都有

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开始,它是一个“引入的元包” 用于构建新包的最基本包。” 有更多 信息

或者你可以使用golang:最新版本,它会很好用

FROM golang:latest
RUN apt-get update 
RUN apt-get install libpcre++-dev -y

您可以使用一个基于Debian的
golang
图像。当你安装GNULIBC和一个完整的C工具链的时候,在阿尔卑斯山基地的图片上不会有太多的空间节省。您可以(也应该)使用多阶段构建,其中最终映像只包含编译的二进制文件,并且可以使用Alpine基

结果将类似于:

#构建时映像;只有运行“go build”所需的部件`
来自golang:1.12-buster作为构建
#安装其他构建时工具
运行apt获取更新\
&&apt get install——假设是\
构建基本ca证书git core tzdata\
libpcre++-dev
#构建应用程序
WORKDIR/app
复制
ENV GO111模块=打开
运行go build-o myapp./cmd/myapp
#运行时映像;只有运行应用程序所需的内容
来自阿尔卑斯山:3.10
#请注意,您需要libpcre的共享库++
运行apk添加ca证书tzdata libpcrepp
复制--from=build/app/myapp/usr/bin/myapp
CMD[“myapp”]

运行apk add--虚拟构建依赖项运行apk add--无缓存构建基础gcc
尝试此操作,或者您可以在最后一步(部署到服务器)安装alpine sdk
apk add--更新alpine sdk
@adii我有一个错误[20278]内部错误:无法创建临时目录!以上解决了问题吗?@adii I已修复
[20278]内部错误:无法创建临时目录但我仍然得到
github.com/glenn-brown/golang-pkg-pcre/src/pkg/pcre/go/pkg/mod/github.com/glenn-brown/golang-pkg-pcre@v0.0.0-2012052223659-48bb82a8b8ce/src/pkg/pcre/pcre.go:52:10:致命错误:pcre.h:没有这样的文件或目录#include^~~~~~~~~编译已终止
我有一个错误:加载共享库libpcre.so.3I时出错出现错误:加载共享库libpcre.so时出错。3