使用docker部署ovs运行环境

注意

本示例仅作为测试环境使用。

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
上一篇