排除啟動時非固定IP Address造成Portainer Agent容器錯誤

排除啟動時非固定IP Address造成Portainer Agent容器錯誤

前情提要:「我們透過 Container Monitoring 發現了一個 Portainer Agent 的錯誤。」最簡單的修正就是每次當 Portainer 發現 Portainer Agent 連不上時,去 Portainer 裡去設定 Portainer Agent 重啟後的新 IP Address。此 Portainer Agent 本身位於 Docker Swarm 的 Overlay 網路上,Overlay 網路預設會分配一個 10.x.x.x/24,第一條通常是 10.0.0.0/24,第二條 10.0.1.0/24 以此類推。

docker network create -d overlay skynet
docker network inspect skynet

可以查詢到 IPAM.Config.Subnet 資訊:

[
    {
        "Name": "skynet",
        "Id": "kli3enae47bc47lt6d3cups8l",
        "Created": "2019-05-28T07:04:41.5478409Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.4.0/24",
                    "Gateway": "10.0.4.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": null,
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4099"
        },
        "Labels": null
    }
]

當有服務掛此 skynet Overlay 網路時,就會動態取的一個 IP Address,而且就之前取得錯誤訊息來看,當服務被重啟之後,會重新分派到一個新的 IP Address。

將 Portainer Agent 加入 skynet Overlay 網路:

docker logs agentforsky
2019/05/28 15:18:21 [INFO] serf: EventMemberJoin: 8d7ad9a02d17 10.0.4.4
2019/05/28 15:18:21 [WARN] memberlist: Failed to resolve tasks.portainer_agent: lookup tasks.portainer_agent: no such host
2019/05/28 15:18:21 [INFO] - Starting Portainer agent version 1.2.1 on 0.0.0.0:9001 (cluster mode: true)
2019/05/28 15:19:52 [INFO] serf: EventMemberJoin: 8d7ad9a02d17 10.0.4.6
2019/05/28 15:19:52 [WARN] memberlist: Failed to resolve tasks.portainer_agent: lookup tasks.portainer_agent: no such host
2019/05/28 15:19:52 [INFO] - Starting Portainer agent version 1.2.1 on 0.0.0.0:9001 (cluster mode: true)

我們讓 Portainer Agent 服務重啟,可以發現,重啟後的 IP Address 更新了。像這類需要固定 IP Address作業的容器怎麼辦?其實很簡單,在 docker run 或時加入 --ip 參數指定固定的 IP Address 即可,例如:--ip="10.0.4.4" (Compose file 設定 ipv4_address 一樣的道理):

PS C:\> docker logs agentforsky
2019/05/28 15:31:59 [INFO] serf: EventMemberJoin: 561c00ee6eb4 10.0.4.4
2019/05/28 15:31:59 [WARN] memberlist: Failed to resolve tasks.portainer_agent: lookup tasks.portainer_agent: no such host
2019/05/28 15:31:59 [INFO] - Starting Portainer agent version 1.2.1 on 0.0.0.0:9001 (cluster mode: true)
2019/05/28 15:32:33 [INFO] serf: EventMemberJoin: 561c00ee6eb4 10.0.4.4
2019/05/28 15:32:33 [WARN] memberlist: Failed to resolve tasks.portainer_agent: lookup tasks.portainer_agent: no such host
2019/05/28 15:32:33 [INFO] - Starting Portainer agent version 1.2.1 on 0.0.0.0:9001 (cluster mode: true)
2019/05/28 15:32:47 [INFO] serf: EventMemberJoin: 561c00ee6eb4 10.0.4.4
2019/05/28 15:32:48 [WARN] memberlist: Failed to resolve tasks.portainer_agent: lookup tasks.portainer_agent: no such host
2019/05/28 15:32:48 [INFO] - Starting Portainer agent version 1.2.1 on 0.0.0.0:9001 (cluster mode: true)

現在很明顯,就算此 Portainer Agent 服務被不斷重啟,還是可以取得固定的 IP Address。這樣就能解決動態 IP Address 造成 Portainer 連線的問題。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。