Docker环境里Nginx容器乱码问题

1,130 阅读1分钟

一.背景原因

    搭建本地服务用到了nginx容器,使用过程中遇到了访问nginx主页返回html中文乱码问题。

二.问题复现

2.1 拉取nginx镜像

docker pull nginx

2.2 启动容器服务

docker container run -d --name mynginx -p 3000:80  nginx

2.3 映射网页目录

新建目录

mkdir nginx

进入目录,新建html子目录

mkdir html

在这个子目录里面,新建一个index.html文件,内容如下:

<h1>你好</h1>

2.4 映射配置文件

进入nginx目录,把容器里的Nginx配置文件拷贝到本地目录

docker container cp mynginx:/etc/nginx .

更改目录名称nginx为conf

mv nginx conf

停止容器

docker container stop mynginx

删除容器

docker container rm mynginx

2.5 启动新容器服务

在nginx目录下执行,主要是映射网页目录和设置目录,方便后续操作。

docker container run -d --name mynginx -p 3000:80 \
--volume "$PWD/html":/usr/share/nginx/html \
--volume "$PWD/conf":/etc/nginx nginx

2.6 出现问题

访问127.0.0.1:3000出现乱码 image.png

三.解决方案

编辑nginx/html/index.html,设置网页编码。

<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<h1>你好</h1>

image.png

四.总结

  1. 亲自测试通过chrome访问会出现乱码,通过safari访问不会出现乱码
  2. 在nginx的server下配置编码:charset utf-8; 无效 image.png
  3. 重新启动容器并设置容器字符集,无效
docker container run -d --name mynginx \
--volume "$PWD/html":/usr/share/nginx/html \ 
--volume "$PWD/conf":/etc/nginx  \
-p 3000:80  \
-e LANG=C.UTF-8 \  
-e LC_ALL=C.UTF-8 nginx
  1. 有点无语

测试环境

  1. Chrome 版本 110.0.5481.177(正式版本) (arm64)
  2. Docker v20.10.22
  3. nginx镜像ID 114aa6a9f20362f71d64d65bf60aa438fc971a656cec9fa69e732838c6f2425f