Docker化的Keepalived,旨在为多主机容器部署提供简单的高可用性(HA)。Keepalived提供一个或多个虚拟IP地址(VIP)的故障转移功能,确保即使主机发生故障,VIP也始终可用。该镜像特别设计用于Rancher环境中的HAProxy前端,但也适用于大多数需要HA和IP地址故障转移的多主机容器部署(如Apache、Nginx等监听服务)。
HAProxy(及大多数监听服务)不会绑定到主机网络栈中不存在的地址。由于Keepalived仅在单个主机上承载特定VIP,其他主机上的服务将无法绑定到VIP地址,可能导致服务失败。同时,这些主机上的Keepalived会通过检查VIP地址和指定服务端口上的监听器来执行健康检查,也可能因此失败。
为避免此问题,可采用以下两种方法:
方法一:配置服务绑定所有地址
将服务(如HAProxy)配置为不指定具体地址,从而绑定到所有地址,例如:
bind :80bind *:80bind 0.0.0.0:80方法二:启用非本地地址绑定
通过将内核参数net.ipv4.ip_nonlocal_bind设置为1,允许服务绑定到不存在的地址。
大多数Linux发行版
在Debian、RHEL及大多数Linux变体上,只需将net.ipv4.ip_nonlocal_bind=1添加到/etc/sysctl.conf文件末尾,然后执行sudo sysctl -p命令重新加载配置。
RancherOS v0.5.0及更高版本
编辑/var/lib/rancher/conf/cloud-config.d/user_config.yml文件,在适当位置添加:
yamlrancher: sysctl: net.ipv4.ip_nonlocal_bind: 1
RancherOS v0.4.5及更低版本
如果未使用默认控制台,请参考“大多数Linux发行版”部分。如果使用默认控制台:
若尚未创建/opt/rancher/bin/start.sh启动文件,编辑/var/lib/rancher/conf/cloud-config.d/user_config.yml文件,添加以下内容以创建包含sysctl -p命令的文件:
yamlwrite_files: - encoding: b64 content: IyEvYmluL3NoCnN5c2N0bCAtcApleGl0Cg== owner: root:root path: /opt/rancher/bin/start.sh permissions: '0744'
若已存在该文件,在其中添加sysctl -p命令。
无论哪种情况,在/var/lib/rancher/conf/cloud-config.d/user_config.yml文件末尾添加以下内容以创建/etc/sysctl.conf文件:
yamlwrite_files: - encoding: b64 content: bmV0LmlwdjQuY29uZi5hbGwuYXJwX2FjY2VwdCA9IDEgCm5ldC5pcHY0LmlwX25vbmxvY2FsX2JpbmQgPSAxIApuZXQuaXB2NC5jb25mLmFsbC5wcm9tb3RlX3NlY29uZGFyaWVzID0gMQo= owner: root:root path: /etc/sysctl.conf permissions: '0644'
重启系统使文件生效。
CoreOS
执行命令:/bin/sh -c "/usr/sbin/sysctl -w net.ipv4.ip_nonlocal_bind=1",或在单元文件中添加oneshot执行。
其他发行版可能有略微不同的命令或语法,请参考相应文档。
CHECK_IP环境变量设置为any。CHECK_IP环境变量设置为与VIRTUAL_IP相同的值。bashdocker run -d \ --name keepalived \ --net=host \ --cap-add=NET_ADMIN \ -e VIRTUAL_IP=192.168.1.100 \ -e CHECK_IP=any \ -e CHECK_PORT=80 \ yourusername/docker-keepalived
| 环境变量 | 描述 | 默认值 |
|---|---|---|
| VIRTUAL_IP | 要管理的虚拟IP地址 | 无 |
| CHECK_IP | 健康检查的IP地址,设为any表示仅检查端口 | 无 |
| CHECK_PORT | 健康检查的端口 | 无 |
本项目源于Rancher论坛上的讨论([***] Iveson(@sjiveson),包括上述非本地绑定的说明,其脚本是本项目的核心。同时感谢@fabiorauber提出问题,帮助改进文档。
注意:本项目仍在开发中,可能会不断变更,尚未准备好用于实际测试。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务