侧边栏壁纸
博主头像
小萌小筑博主等级

叹一句当时只道是寻常

  • 累计撰写 10 篇文章
  • 累计创建 6 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Docker容器hostname环境变量编辑(ChatNextWeb部署)

超级小萌哥
2024-05-08 / 0 评论 / 0 点赞 / 19 阅读 / 4515 字

在阿里云centos7上使用Docker部署ChatNextWeb时,由于hostname无法正确识别导致请求返回-3001-3008,其原因均为hostname获取错误(不到)。

-3008

此错误代码代表无法获取到容器的hostname,原因为云服务器中的Docker容器自动获取了主机的dns导致无法获得主机的hostname。

解决

  1. 进入容器内部

    docker exec -it container_name sh
  2. 修改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

解决方案

  1. 首先需要先停止Docker容器,并在停止之前获取容器持久化文件路径。

    # 可能信息较多 可以添加 | grep HostnamePath
    docker inspect container_name
    # 进入容器要修改的文件有 config.v2.json、hostname、hosts
    docker stop container_name
  2. 然后需要停止Docker服务,实测不停止直接修改无用。

    systemctl stop docker
  3. 修改文件,hostname以及hosts的修改比较简单,此处建议直接修改为localhostconfig.v2.json文件需要修改this.Config.Hostname比较难找,只有一行

  4. 然后重启Docker服务和容器即可。

    systemctl start docker
    docker start container_name

0

评论区