在阿里云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
评论区