我最近才发现 LXD,对它还很陌生。我在与图像和容器的基本交互方面取得了进展 - 它看起来很有前途。
目前,我遇到了从主机连接到在本地容器中运行的服务的问题。这是我第一次尝试。我收到“连接被拒绝”错误。更多详细信息如下:
user@sparky1:~$ curl 10.0.3.49
curl: (7) Failed to connect to 10.0.3.49 port 80: Connection refused
user@sparky1:~$
主机是笔记本电脑上的 Ubuntu Server 14.04 - 这是新安装的,非常普通。我让系统完成所有配置(包括 lxcbr0 桥接),并且没有更改任何开箱即用的默认设置。
我正在运行一个基于 CentOSv6 镜像的容器。容器已启动,我在容器内运行一个 Web 服务器。在容器内,我可以通过端口 80 顺利连接到其本地 Web 服务器(通过运行“curl hostname”)。它连接到环回 IP 127.0.0.1,我从容器内的本地 Web 服务器获得有效响应。太棒了。
成功响应(即使是 403 响应):
[root@wc1 ~]# curl wc1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.</p>
<hr>
<address>IBM_HTTP_Server at wc1 Port 80</address>
</body></html>
[root@wc1 ~]#
如果我尝试通过桥接上的 IP 进行连接(无论是从容器内部还是从主机),我都会收到提到的“连接被拒绝”错误。
因此,我试图弄清楚如何才能允许从主机连接到容器中运行的 Web 服务器。我花了几个小时在 Google 上搜索,但没找到答案(或者太笨而无法识别)。
防火墙已禁用(“ufw status”显示)。我遗漏了什么?提前致谢。
答案1
我解决了自己的问题。我最初回忆起(假设。叹气)我已经指定了知识产权在容器内发出“curl”命令时,但实际上我指定了主机名。一旦我注意到我实际上指定了主机名,并且主机名解析为环回,我就解决了我的问题。
在我的 apache httpd.conf 中,我没有注意到 Listen di 解析为环回设备而不是 lxcbr0 桥上的 IP。指令指定了主机名。httpd.conf 文件是由供应商工具自动生成的,所以我一开始没有考虑它。一旦我将 Listen 指令更改为在正确的 IP(10.0.3.49)上监听,一切就都正常了。