希望TiDB的Docker官方镜像禁用CGO

在当前的Makefile中,存在大量的CGO_ENABLED=1,导致官方的Docker镜像在Debian系的Linux中运行会报错,报错内容是
runtime/cgo: pthread_create failed: Operation not permitted,必须给额外的高权限才能运行。

详细分析可以见:https://github.com/docker-library/golang/issues/467

简单的解决方法是设置CGO_ENABLED=0就可以了,试了下也能编译成功。

1 个赞

背景:准备在dev环境用docker只起一个tidb-server让开发日常自测,发现在Ubuntu环境下启动报错。
PS: 理论上如果k8s是跑在Ubuntu上的话,tidb on k8s应该也会报错(还没有经过测试)

大佬 专业

:+1: :+1: :+1:

额,经过测试,这个报错在Docker 20版本以上已经被修复了,对应的Ubuntu版本是22.04才修复。也就是Ubuntu 22.04之后直接安装最新Docker,即便是启用了CGO的镜像也不会报错。

PS: 比较坑的是Docker 24版本彻底废弃了AUFS文件系统。如果使用了AUFS,在升级Docker版本后必须更改storage-driver,而这会导致老的容器起不来,必须重建容器 :upside_down_face:

一直没搞懂在docker里安装数据库有什么优势

这里就是背景,TiDB语法和MySQL 5.7还是有些不同的,给开发自测的。没必要搭建一套完整的TiDB集群

自测单机1pd 1tidb1tikv就行,能跑mysql就能跑tidb 我都是自己电脑起个虚拟机玩

对于开发来说太复杂了,没有docker来的方便

线上测试会维护多个开发分支,不同开发分支的TiDB环境还不能一样。
起三个进程,不如直接让TiDB写本地磁盘,这种给开发来说一条docker run命令或者docker-compose文件就够了。

docker run -dt -p 4000:4000 --restart unless-stopped --name tidb-v7.1.1-4000 -v /data/tidb-4000:/data/tidb pingcap/tidb:v7.1.1 --path /data/tidb

PS:默认情况下,tidb-server就是使用本地存储的
image

1 个赞

此时插播ad

你这个不错

这个真的是强,不过应该是基于S3的存储后的一种福利。期待TiKV on S3开放给本地TiDB集群,这样测试集群有一套就够了

生产环境不用docker安装数据库吧

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。