注意
本示例仅作为测试环境使用。
Dockerfile配置
Dockerfile
如下,本示例采用apt安装openvswitch。
FROM debian:bookworm
COPY start-ovs.sh /usr/local/bin/
# 安装OVS
RUN chmod +x /usr/local/bin/start-ovs.sh \
&& apt-get update && apt-get install -y openvswitch-switch openvswitch-common iproute2 \
&& rm -rf /var/lib/apt/lists/*
# 设置启动命令
CMD ["/usr/local/bin/start-ovs.sh"]
start-ovs.sh
启动脚本如下:
#!/bin/bash
set -e
echo '=== 开始启动Open vSwitch ==='
# 1. 创建必要的目录
echo '创建运行时目录...'
mkdir -p /var/run/openvswitch
mkdir -p /etc/openvswitch
chmod 755 /var/run/openvswitch
chmod 755 /etc/openvswitch
# 2. 检查内核模块
echo '检查内核模块...'
if ! lsmod | grep -q openvswitch; then
echo '加载openvswitch内核模块...'
modprobe openvswitch || echo '警告: 内核模块加载失败,继续用户空间模式'
fi
# 3. 初始化数据库(如果不存在)
echo '检查数据库...'
if [ ! -f /etc/openvswitch/conf.db ]; then
echo '创建新的OVS数据库...'
ovsdb-tool create /etc/openvswitch/conf.db /usr/share/openvswitch/vswitch.ovsschema
fi
# 4. 启动数据库服务器
echo '启动ovsdb-server...'
ovsdb-server \
--remote=punix:/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--private-key=db:Open_vSwitch,SSL,private_key \
--certificate=db:Open_vSwitch,SSL,certificate \
--bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
--pidfile=/var/run/openvswitch/ovsdb-server.pid \
--detach \
--log-file=/var/log/openvswitch/ovsdb-server.log
# 5. 等待数据库启动
echo '等待数据库启动...'
sleep 5
# 6. 检查数据库连接
echo '检查数据库连接...'
timeout 30 bash -c '
until ovs-vsctl --no-wait show >/dev/null 2>&1; do
echo \"等待数据库就绪...\"
sleep 2
done
'
# 7. 初始化配置
echo '初始化OVS配置...'
ovs-vsctl --no-wait init
# 8. 启动ovs-vswitchd
echo '启动ovs-vswitchd...'
ovs-vswitchd \
--pidfile=/var/run/openvswitch/ovs-vswitchd.pid \
--log-file=/var/log/openvswitch/ovs-vswitchd.log \
--detach
# 9. 等待vswitchd启动
echo '等待ovs-vswitchd启动...'
sleep 3
# 10. 检查服务状态
echo '检查服务状态...'
if pgrep -x ovs-vswitchd >/dev/null && pgrep -x ovsdb-server >/dev/null; then
echo '=== Open vSwitch 启动成功 ==='
echo '网桥状态:'
ovs-vsctl show
echo '进程状态:'
ps aux | grep -E '(ovsdb|ovs-vswitch)' | grep -v grep
else
echo '=== Open vSwitch 启动失败 ==='
echo 'ovsdb-server 进程:'
pgrep -l ovsdb-server || echo '未运行'
echo 'ovs-vswitchd 进程:'
pgrep -l ovs-vswitchd || echo '未运行'
exit 1
fi
# 11. 保持容器运行
echo '准备就绪。'
# tail -f /dev/null
tail -f /var/log/openvswitch/ovs-vswitchd.log
build.sh
build构建脚本
#!/bin/bash
docker compose down
docker image rm ovs:bookworm-3.1.0
docker build -t ovs:bookworm-3.1.0 .
docker images
docker compose up -d
docker compose启动
docker-compose.yaml
启动配置
services:
openvswitch:
image: ovs:bookworm-3.1.0
container_name: openvswitch
# privileged: true
cap_add:
- NET_ADMIN
- SYS_ADMIN
volumes:
- /lib/modules:/lib/modules
构建并启动
bash build.sh