Docker + Python3 UTF8 argv проблемы - PullRequest
       6

Docker + Python3 UTF8 argv проблемы

0 голосов
/ 25 апреля 2018

Рассмотрим следующую программу на Python, которая выводит понимание того, какие аргументы командной строки она получила:

#!/usr/bin/env python3
print(repr(__import__("sys").argv))

Вот что происходит, когда я запускаю ее с китайским символом в качестве аргумента:

$ /tmp/mytest 我                          
['/tmp/mytest', '我']

Теперь рассмотрим следующий Dockerfile, который помещает его в / tmp / mytest:

FROM ubuntu:18.04
RUN apt-get update && apt-get install -y python3
RUN echo '#!/usr/bin/env python3' >> /tmp/mytest
RUN echo 'print(repr(__import__("sys").argv))' >> /tmp/mytest
RUN chmod +x /tmp/mytest

Когда я пытаюсь запустить его, выходные данные отличаются:

$ sudo docker build -t mytest .                
Sending build context to Docker daemon  20.48kB
Step 1/5 : FROM ubuntu:18.04
 ---> 02f9d6707661
Step 2/5 : RUN apt-get update && apt-get install -y python3
 ---> Using cache
 ---> 5c9a6768a337
Step 3/5 : RUN echo '#!/usr/bin/env python3' >> /tmp/mytest
 ---> Using cache
 ---> e0410fc9684e
Step 4/5 : RUN echo 'print(repr(__import__("sys").argv))' >> /tmp/mytest
 ---> Using cache
 ---> d123c9645c5c
Step 5/5 : RUN chmod +x /tmp/mytest
 ---> Using cache
 ---> 9b2ac9b174e0
Successfully built 9b2ac9b174e0
Successfully tagged mytest:latest
$ sudo docker run -ti mytest /tmp/mytest 我
['/tmp/mytest', '\udce6\udc88\udc91']

Почему это?Виноват ли Докер или Питон?Как заставить скрипт работать одинаково в обоих случаях?

1 Ответ

0 голосов
/ 25 апреля 2018

Очевидно, что проблема исчезнет, ​​если вы создадите и экспортируете локаль UTF8, как в следующем Dockerfile:

FROM ubuntu:18.04
RUN apt-get update && apt-get install -y python3 locales
RUN echo '#!/usr/bin/env python3' >> /tmp/mytest
RUN echo 'print(repr(__import__("sys").argv))' >> /tmp/mytest
RUN locale-gen en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
RUN chmod +x /tmp/mytest
...