rkt 容器不允许我使用端口

rkt 容器不允许我使用端口

我正在尝试在 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

相关内容