一.背景原因
搭建本地服务用到了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出现乱码
三.解决方案
编辑nginx/html/index.html,设置网页编码。
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<h1>你好</h1>
四.总结
- 亲自测试通过chrome访问会出现乱码,通过safari访问不会出现乱码
- 在nginx的server下配置编码:charset utf-8; 无效
- 重新启动容器并设置容器字符集,无效
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
- 有点无语
测试环境
- Chrome 版本 110.0.5481.177(正式版本) (arm64)
- Docker v20.10.22
- nginx镜像ID 114aa6a9f20362f71d64d65bf60aa438fc971a656cec9fa69e732838c6f2425f