在我的主机 Ubuntu 18.04 上,我使用默认设置运行两个 lxc 容器。容器也使用 Ubuntu 18.04。我有一个在 container1 上运行的应用程序,它在 https://localhost:3000/ 上提供基于 https 的服务。 Container2 甚至无法与container1 建立连接。
Container2 可以 ping 容器 1 并读取在 localhost 上运行的默认 Apache2 服务器的 html(对于容器 1)。使用 netcat 进行测试,我可以与几个主要端口建立连接,但是端口 3000 的连接被拒绝。
root@c2:~# nc -zv c1 22
Connection to c1 22 port [tcp/ssh] succeeded!
root@c2:~# nc -zv c1 80
Connection to c1 80 port [tcp/http] succeeded!
root@c2:~# nc -zv c1 443
nc: connect to c1 port 443 (tcp) failed: Connection refused
nc: connect to c1 port 443 (tcp) failed: Connection refused
root@c2:~# nc -zv c1 3000
nc: connect to c1 port 3000 (tcp) failed: Connection refused
nc: connect to c1 port 3000 (tcp) failed: Connection refused
同样的情况也适用于我的主机和任何容器之间。默认情况下似乎只能访问端口 22 和 80。我尝试在所有容器上启用 ufw,但仍然无法解决:
root@c1:~# ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
22/tcp ALLOW Anywhere
22 ALLOW Anywhere
443 ALLOW Anywhere
873 ALLOW Anywhere
3000 ALLOW Anywhere
Anywhere on eth0@if16 ALLOW Anywhere
Apache ALLOW Anywhere
80 ALLOW Anywhere
20 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
873 (v6) ALLOW Anywhere (v6)
3000 (v6) ALLOW Anywhere (v6)
Anywhere (v6) on eth0@if16 ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
20 (v6) ALLOW Anywhere (v6)
Anywhere ALLOW OUT Anywhere on eth0@if16
Anywhere (v6) ALLOW OUT Anywhere (v6) on eth0@if16
即使通过curl 进行测试也清楚地表明端口连接已关闭,这就是问题所在:
root@c2:~# curl https://10.155.120.175:3000/
curl: (7) Failed to connect to 10.155.120.175 port 3000: Connection refused
我已经被这个问题困扰了一个星期了,有人能帮我解决这个问题吗?
编辑(附加数据):
容器 1 上的 netstat 结果:
root@c1:~# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 289/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1385/sshd
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 293/MyApp
tcp6 0 0 :::80 :::* LISTEN 310/apache2
tcp6 0 0 :::22 :::* LISTEN 1385/sshd
答案1
端口 3000 仅侦听localhost
.您需要正确配置应用程序,以便端口开放0.0.0.0
(正如您在其他端口中看到的那样)。