問題說明
docker的python容器中執行print(‘測試’),常見的錯誤提示,在宿主機不會出現
UnicodeEncodeError: 'ascii' codec can't encode characters in position
原因分析:
原因是因爲locale 的設置導致 shell 的stdin/stdout/stderr 的默認編碼爲ascii,當用ascii編碼去解釋python3默認unicode編碼的時候,自然會有問題
解決方法:
python3 的解決方式是 容器在初始化時候 需要設置shell的stdin/stdout/stderr 的默認編碼方式爲 utf-8,需要重啓容器
docker run -e 指定python io encoding編碼格式:
# docker run 方式
docker run -e PYTHONIOENCODING=utf-8 mydocker_image:v1 /bin/bash
docker compose 編排方式:
# docker-compose 方式
environment:
- PYTHONIOENCODING=utf-8