我正在尝试在 Fedora 22 上构建一个 rkt(rkt 0.6.1)容器(实验性 poc),但似乎无法分配网络端口。我想我曾经运行过它,但现在不知何故失败了。它似乎不是特定于应用程序的,我在各种端口(80、8080 等)上尝试了 httpd,还在各种端口(8000、9876 等)上尝试了 python SimpleHTTPServer,它总是告诉我该端口已被使用。
我已检查ss -tulpen
该端口未被使用。我已禁用 selinux 和防火墙。这可能是什么原因?
编辑:
这似乎与我的容器有关,因为我能够运行预构建的 etcd 容器https://github.com/coreos/etcd/releases/download/v2.0.4/etcd-v2.0.4-linux-amd64.aci,至少在本地主机上打开端口。
我的 pyweb 清单如下所示:
{
"acKind": "ImageManifest",
"acVersion": "0.6.1",
"name": "pyweb",
"labels": [
{ "name": "os", "value": "linux" },
{ "name": "arch", "value": "amd64" }
],
"app": {
"exec": [
"/usr/bin/python", "-m", "SimpleHTTPServer", "9876", "/var/www"
],
"user": "0",
"group": "0",
"ports": [
{
"name": "alt-http",
"port": 9876,
"protocol": "tcp",
"socketActivated": true
}
]
}
}
使用此清单构建的应用程序退出时显示
[13678.750051] python[5]: socket.error: [Errno 98] Address already in use
答案1
您可能必须清理已退出的容器,这将删除 iptable 规则。
rkt gc --grace-period=0s
在我的 systemd 服务文件中,有以下行:
ExecStopPost=rkt gc --grace-period=0s