今天在一台 Redhat 7 服务器上启动一个 Kafka 3.7.2 容器,遇到一个很诡异的报错。经过排查发现,问题是由容器里新版 bash 引起的,应该是新 bash 或动态库可能跟老内核不兼容。
最终,我们把宿主上的旧版 bash 及其依赖动态库挂载到容器上解决问题。整个问题排查过程和解决思路挺有意思的,涉及不少基础知识,分享给大家。
报错背景
Kafka 容器启动方式平白无奇:
|
|
今天在一台 Redhat 7 服务器上启动一个 Kafka 3.7.2 容器,遇到一个很诡异的报错。经过排查发现,问题是由容器里新版 bash 引起的,应该是新 bash 或动态库可能跟老内核不兼容。
最终,我们把宿主上的旧版 bash 及其依赖动态库挂载到容器上解决问题。整个问题排查过程和解决思路挺有意思的,涉及不少基础知识,分享给大家。
Kafka 容器启动方式平白无奇:
|
|
笔者最近在整理 Node.js 操作各数据库的方法,却不料遇到一个很棘手的问题:很多数据库,都需要同时下载 Server 端和 Client 端,并进行相应的配置,着实是麻烦。那有没有方法可以省去这些步骤呢?
答案肯定是有的,这就是今天要介绍的主题 —— Docker。
那 Docker 是什么呢?
通俗地讲,当我们部署代码到生产服务器时,第一次都需要先进行环境配置,比如你有 100 台机器,你就要手动配置 100 台服务器的环境,这样难保不会出错。 Docker 则将软件服务制作成标准化的模板,也就是镜像,从而实现快捷部署。每次部署新机器,只需要拉取相关镜像,即可一键完成。
Go 语言应用部署 不需要依赖 ,非常简便,这是一个不小的优势。
Go 语言官方镜像非常大,超过 500MB 。镜像之所以如此庞大是因为它包含了构建 Go 程序所需的全部 工具链 。然而运行编译好的(静态)二进制程序,并不需要这些工具。
本文介绍如何制作一个紧凑的 Docker 镜像用于部署 Go 应用,大小控制在 10MB 以内。
本文实验所有操作均在 macOS 下进行,在其他平台进行也是类似的。