在阿里云centos7上使用Docker部署ChatNextWeb
时,由于hostname无法正确识别导致请求返回-3001
与-3008
,其原因均为hostname获取错误(不到)。
-3008
此错误代码代表无法获取到容器的hostname,原因为云服务器中的Docker容器自动获取了主机的dns导致无法获得主机的hostname。
解决
进入容器内部
docker exec -it container_name sh
修改dns
vim /etc/resolv.conf
修改文件内容为
# 正常的局域网dns依然可用,此处可能为ChatNextWeb要求
nameserver 127.0.0.53
-3001
此错误代码代表无法解析主机hostname到ip地址。
解决方案(伪)
主机的hostname可以通过hostname
命令查看,其路径及解析分别位于/etc/hostname
和/etc/hosts
,甚至centos7有hostnamectl
可以直接设置主机的hostname,与前面修改的方式不同不需要重新启动来更新hostname。
但Docker内的容器即使使用的系统为centos
,但也由于为简化版导致无法使用hostnamectl
命令,更曹丹的是由于Docker停止容器(stop)时会将环境变量持久化,导致修改的hostname在重启后也不会更新,只能通过修改容器的持久化文件来修改。
/etc/hosts
文件模板# ip domain_name 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
解决方案
首先需要先停止Docker容器,并在停止之前获取容器持久化文件路径。
# 可能信息较多 可以添加 | grep HostnamePath docker inspect container_name # 进入容器要修改的文件有 config.v2.json、hostname、hosts docker stop container_name
然后需要停止Docker服务,实测不停止直接修改无用。
systemctl stop docker
修改文件,
hostname
以及hosts
的修改比较简单,此处建议直接修改为localhost
。config.v2.json
文件需要修改this.Config.Hostname
,比较难找,只有一行。然后重启Docker服务和容器即可。
systemctl start docker docker start container_name
评论区