Jenkins流水线中Docker Compose报UnicodeDecodeError如何解决?
解决Jenkins流水线中Docker Compose的UnicodeDecodeError问题
我之前也碰到过类似的报错,结合你给出的信息,这个问题主要是老版本Docker Compose的编码兼容性缺陷加上命令参数符号错误导致的,咱们一步步来解决:
问题根源分析
你看到的错误信息里的$'\342\200\223f'和$'\342\200\223rm',其实是Shell把**全角长破折号(–)**解析成了非ASCII字节,而Docker Compose 1.9.0这个非常老旧的版本(2017年发布)对非ASCII字符的处理存在bug,直接触发了UnicodeDecodeError。另外你命令里的-rm参数也是错误的,docker-compose run的正确清理参数是--rm(两个英文短横线)。
具体解决步骤
1. 修正命令行参数符号
先把你的执行命令改成完全使用英文短横线的正确格式:
docker-compose -f ./jenkins/docker-compose.yml run --rm redis
重点确认:
-f是单个英文短横线加参数名--rm是两个英文短横线加参数名,这是Docker Compose的标准长参数格式
2. 升级Docker Compose版本(强烈推荐)
Docker Compose 1.9.0太老了,不仅有编码问题,还缺少很多新特性和bug修复。建议升级到v2.x系列的稳定版本,比如最新的v2.20.x:
- 在Jenkins节点上执行卸载旧版本的命令(如果是二进制安装的话):
sudo rm /usr/local/bin/docker-compose - 安装新版本:
(如果是用包管理器安装的,比如apt/yum,直接对应更新即可)sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
3. 确保Jenkins执行环境用UTF-8编码
在Jenkins的全局配置里添加环境变量,避免编码解析错误:
- 进入Jenkins -> 系统管理 -> 系统配置 -> 全局属性
- 勾选“环境变量”,添加以下两个变量:
- 变量名:
LANG,值:en_US.UTF-8 - 变量名:
LC_ALL,值:en_US.UTF-8
- 变量名:
验证
执行修正后的命令,或者升级Docker Compose后再运行,应该就能正常拉起Redis容器,不会再出现Unicode解码错误了。
内容的提问来源于stack exchange,提问作者Happy Coder
相关产品推荐
相关产品推荐

