python3使用docker部署服务中文编码问题

问题描述:

使用docker部署服务时候,请求中有中文标签。在容器内部执行python3程序不报错,使用docker的ENTRYPOINT启动python3程序,报错信息如下:

 File "APP.py", line 162, in process
2021-05-31T08:06:16.121563273Z     print("req_json:", str(req_json))
2021-05-31T08:06:16.121570329Z UnicodeEncodeError: 'ascii' codec can't encode characters in position 116-118: ordinal not in range(128)

错误原因:

参考:https://blog.csdn.net/qihongchao/article/details/80432933

因为locale 的设置导致 shell 的stdin/stdout/stderr 的默认编码为ascii,当用ascii编码去解释python3默认unicode编码的时候,则会有问题。

解决办法:docker run中设置shell的stdin/stdout/stderr 的默认编码方式为 utf-8.

# 添加-e PYTHONIOENCODING=utf-8 才能正确显示中文

docker run -d --runtime=nvidia \
--name hetao_aiplat_track_siammask \
--restart always \
-p 12502:22 \
-p 12503:12345 \
-e GPU_ID=1 \
-e THREAD_NUM=5 \
-e PYTHONIOENCODING=utf-8 \
-v /bee/hetao/common/aiplat/track:/track_data \
hetao_aiplat_track_siammask_dev:latest

另外,使用前提是已经设置好了代码环境中已经安装好了zh_CN.UTF-8编码集:

我使用的dockerfile中相关代码如下:

# 更新源,安装ssh服务以及中文语言环境
ADD ./sources_aliyun-18.04.list /etc/apt/sources.list
RUN apt-get -y update --fix-missing \
&& apt-get install -y -f net-tools openssh-server build-essential language-pack-zh-hans vim git tmux\
&& apt-get autoremove -y --force-yes \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& echo "export LC_ALL=zh_CN.utf8" >> ~/.bashrc \
&& echo "export LANG=zh_CN.utf8" >> ~/.bashrc \
&& echo "export LANGUAGE=zh_CN.utf8" >> ~/.bashrc 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值