在 Ubuntu 容器中运行应用程序(Python、Java、Ruby 等),遇到编码问题(ascii、utf-8)。

29
在我的个人电脑上,该应用程序运行良好,但是当它部署到 Docker 中时,由于存在无效字符,它会失败。我正在使用 "ubuntu:latest" 容器以及 Python3、Java 和 Ruby。
4个回答

53

您需要正确设置语言环境

这是最基本的正确Dockerfile:

FROM ubuntu

RUN apt update && apt -y install locales && locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

通常的 Docker 镜像没有指定语言环境。如果您进入其中并执行 locale 命令,就会看到这一点。
sudo docker exec -i -t yowsup3 bash

Sources:


在某些情况下,运行 locale-gen 并设置 LC_ALL 就足够了。 - Ilia Barahovsky
6
  1. 由于":latest"是默认标签,所以您可以省略它。
  2. Ubuntu容器缺少locales软件包,其中包括“locale-gen”命令,因此第二行应为:RUN apt update && apt -y install locales
- Murmel
1
我已经添加了您的更正。谢谢。 - d0x
或者在一行中设置所有环境变量:ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8' - bathyscapher

4
我尝试了上述解决方案,发现locale-gen命令在我的Docker中不可用。因此,在RUN命令之前添加此行或将其添加进去。
RUN apt-get update && apt-get install -y locales && locale-gen en_US.UTF-8

现在这将会起作用。

其次,ENV LC_ALL en_US.UTF-8就足以设置大多数变量,但是还剩下两个空的,所以我们需要全部3个来设置。


这真的解决了问题! - Asad Shakeel

0

docker ubuntu 18.04 镜像使用 Unicode 修复

FROM ubuntu:18.04

ENV LANG=C.UTF-8

在 Docker 文件中添加此环境变量


0
FROM centos:7 

ENV LANG=en_US.UTF-8

在 Docker 文件中添加上述一行对我有用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接