问题描述:
使用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