问题背景※
今日生产有一个服务迁移到docker里面之后,一直提示签名失败,迁移之前都正常而且公钥和私钥并未做变更,排查了公私钥问题之后发现,docker compose不使用-d挂起时打印的日志存在中文乱码,猜测是否是由于默认编码不同导致的签名不通过,后证实签名串含有中文才会失败,那就肯定是编码问题了。
修改默认编码※
可以在Dockerfile中、启动时、docker-compose.yml中的任意一个地方,指定环境变量LANG=en_US.UTF-8
这里之所以不使用zh_CN.UTF-8是因为我使用的基础镜像里只安装了en_US.UTF-8这个中文编码,具体可以根据实际情况修改编码或者安装好编码再修改环境变量。
查看镜像已安装的编码※
先查看容器id
docker ps进入容器内部
docker exec -it 303798101c4a sh查看已安装的所有编码
locale -a