使基于CentOS8的Docker镜像支持中文

前言

原本已经在虚拟机中安装了CentOS8虚拟机,现在想在docker中也升级到CentOS8容器(原本是7),本文是以Dockerfile的方式来构建镜像(不推荐基于容器来构建镜像),所以最终是要完成编写Dockerfile。既然CentOS官方有出官方镜像当然简单改改就能跑起来了,但是在启动程序上遇到了中文乱码的问题,源于官方镜像不支持中文。

实现

首先需要设置 LANG 环境变量才能实现中文环境,即:

$locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
......
$export LANG=zh_CN.utf8
$locale
LANG=zh_CN.utf8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
......

但是只设置LANG环境变量没有安装中文字符集并不能直接支持中文从而出现了乱码,然后按照网络上帮助安装 langpacks-zh_CN 包发现也无法支持中文。然后在虚拟机正常CentOS8系统中根据 strace locale 查看调用得到结论:需要有/usr/lib/locale/zh_CN*目录才能支持中文,进一步查看系统包:
rpm -qa|grep langpack 查出了两个中文支持包:

  • glibc-langpack-zh-2.28-164.el8.x86_64
  • langpacks-zh_CN-1.0-12.el8.noarch
$rpm -ql langpacks-zh_CN-1.0-12.el8.noarch
/usr/share/metainfo/org.fedoraproject.LangPack-zh_CN.metainfo.xml
$rpm -ql glibc-langpack-zh-2.28-164.el8.x86_64
/usr/lib/locale
/usr/lib/locale/zh_CN
/usr/lib/locale/zh_CN.gb18030
......

可以看出来关键在于安装 glibc-langpack-zh 包才能有 /usr/lib/locale/zh_CN 目录,所以得到最终的Dockerfile关键行:

FROM centos:centos8.4.2105
RUN yum -y install langpacks-zh_CN glibc-langpack-zh && \
	yum clean all
ENV LANG zh_CN.utf8
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
步骤如下: 1. 创建一个基于CentOSDocker镜像,可以使用以下命令: ``` FROM centos:latest MAINTAINER yourname <youremail@example.com> ``` 2. 安装PostgreSQL 12,并配置主备集群或单机部署。可以使用以下命令: ``` RUN yum -y update \ && yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm \ && yum -y install postgresql12-server postgresql12-contrib \ && /usr/pgsql-12/bin/postgresql-12-setup initdb \ && systemctl enable postgresql-12 \ && systemctl start postgresql-12 ``` 3. 配置主备集群或单机部署。可以使用以下命令: ``` RUN echo "host replication all 0.0.0.0/0 md5" >> /var/lib/pgsql/12/data/pg_hba.conf \ && echo "wal_level = replica" >> /var/lib/pgsql/12/data/postgresql.conf \ && echo "max_wal_senders = 5" >> /var/lib/pgsql/12/data/postgresql.conf \ && echo "wal_keep_segments = 32" >> /var/lib/pgsql/12/data/postgresql.conf \ && echo "hot_standby = on" >> /var/lib/pgsql/12/data/postgresql.conf \ && systemctl restart postgresql-12 ``` 4. 构建Docker镜像。可以使用以下命令: ``` docker build -t yourname/postgresql12 . ``` 5. 运行Docker容器。可以使用以下命令: ``` docker run -d -p 5432:5432 --name postgresql12 yourname/postgresql12 ``` 其中,-d表示在后台运行容器,-p表示将容器的5432端口映射到主机的5432端口,--name表示命名容器。 6. 验证PostgreSQL是否已安装并正在运行。可以使用以下命令: ``` docker ps ``` 此命令将列出正在运行的容器。 7. 进入已运行的容器并连接到PostgreSQL。可以使用以下命令: ``` docker exec -it postgresql12 bash su - postgres psql ``` 此命令将进入容器并以postgres用户身份连接到PostgreSQL。 8. 验证是否已连接到PostgreSQL。可以使用以下命令: ``` \l ``` 此命令将列出所有数据库。 9. 完成!您已成功制作了一个支持主备集群或单机部署的PostgreSQL 12 Docker镜像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值