Docker 我应该安装什么包而不是libpcre++-开发人员是否在Alpine Golang中使用C代码?
我在docker容器中有一个Golang程序(我使用Ubuntu18)。我还在Golang应用程序中使用正则表达式。在使用此库之前,我应该以以下方式安装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
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 sdkapk 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