更改网络适配器后无法访问 Discourse

我最近更换了网络适配器,现在 Discourse 无法正常工作。我尝试重建 Discourse,但它仍然无法响应 HTTPS 请求。不过我可以看到 Ruby 进程正在运行。

我认为这可能与 MAC 地址有关。在重建 Discourse 后,我看到了这一行:

> /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=5 -e UNICORN_SIDEKIQS=1 -e RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET=/var/run/postgresql -e DISCOURSE_DB_HOST= -e DISCOURSE_DB_PORT= -e LETSENCRYPT_DIR=/shared/letsencrypt -e DISCOURSE_HOSTNAME=XXX -e DISCOURSE_DEVELOPER_EMAILS=XXX -e DISCOURSE_SMTP_ADDRESS=XXX -e DISCOURSE_SMTP_PORT=587 -e DISCOURSE_SMTP_USER_NAME=XXX -e DISCOURSE_SMTP_PASSWORD=XXX -e LETSENCRYPT_ACCOUNT_EMAIL=XXX -e DISCOURSE_MAXMIND_LICENSE_KEY=XXX -h XXX-app -e DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log -**-mac-address 02:3b:06:XX:XX:XX** local_discourse/app /sbin/boot

然而,系统中并没有以 02:3b 开头的适配器。我看到的三个适配器分别是:vethec9f10b(以 6e:a2 开头)、ens160(以 00:0c 开头)以及 docker0(以 02:42:eb:XX:XX:XX 开头)。

我猜测这可能是更换网络适配器之前的旧 MAC 地址。如果是这样,我该如何告知 Discourse 使用正确的 MAC 地址?这看起来像是 Docker 网络适配器的 MAC 地址,但它似乎已经发生了变化。

在使用 Docker 时,您会有一个额外的虚拟适配器,它代表您的服务器在 docker0 虚拟网桥上的地址:

○ → ip addr show dev docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:3a:ad:0b:94 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

任何正在运行的 Docker 容器在此虚拟网桥上都会有一个 MAC 地址:

○ → docker run --rm --name example -it debian 
root@ba1b0e1446c8:/# 

(在另一个窗口中:)
○ → docker inspect example | jq '.[0].NetworkSettings.IPAddress'
"172.17.0.2"

○ → docker inspect example | jq '.[0].NetworkSettings.MacAddress'
"02:42:ac:11:00:02"

○ → ping -c 1 172.17.0.2 > /dev/null; arp 172.17.0.2
Address                  HWtype  HWaddress           Flags Mask            Iface
172.17.0.2               ether   02:42:ac:11:00:02   C                     docker0

这与您系统的接口完全独立。不过,该 MAC 地址应该会出现在 docker0 网桥上:

○ → brctl showmacs docker0
port no	mac addr		is local?	ageing timer
  1	02:42:ac:11:00:02	no		 187.24
…

当您“更改网络适配器”时,您究竟做了什么更改?

它是否仍然能获取 IP 地址并具备所有应有的功能?即,正常网络功能是否正常?

运行 ip addr 并确保其地址与您尝试访问的地址一致。

或许可以将输出粘贴到这里。

客户端是否连接到套接字但没有收到响应?

非常感谢!这正是我需要的提示。当我更改网络适配器时,机器的静态 IP 地址变成了动态 IP 地址,因此它无法响应客户端。我重置了 IP 地址后,问题就解决了。看来这与 MAC 地址无关,而是 IP 地址的问题。