神末shenmo
deepin
2025-10-31 13:11 Spark-App
Q&A Team
https://bbs.deepin.org.cn/post/291256
用这个装
Reply Like 0 View the author
https://bbs.deepin.org.cn/post/291256
用这个装
https://linyaps.org.cn/contributionguidelines 自己动手丰衣足食
https://bbs.deepin.org.cn/post/291256
用这个装
子系统试过了,也没有17的包,我只知道最新的debian13有这个包,但debian13没有子系统
https://linyaps.org.cn/contributionguidelines 自己动手丰衣足食
有没有更详细、系统的教程找了好几个,但是太散太乱根本看不懂
你确定安装在容器里面你也能连接数据库吗?
你学一下docker啊,学完了直接去镜像站点拉各种打包好的镜像,数据库的,操作系统的,啥没有,何必要
折腾玲珑去搞这些啊。
可以确定docker有17的镜像

我用的是14版本的

很方便的,AI搜一个安装docker并且使用docker安装postgreSQL
docker

你确定安装在容器里面你也能连接数据库吗?
docker是可以的,玲珑不可以吗?
你学一下docker啊,学完了直接去镜像站点拉各种打包好的镜像,数据库的,操作系统的,啥没有,何必要
折腾玲珑去搞这些啊。
我知道docker里有我也会,但是docker安装配置太麻烦了,我想试试玲珑行不行
这种用docker 。玲珑解决的是桌面软件,没必要折腾。
666
6,docker安装还麻烦
刚好我几天前因为iptables洁癖基于systemd-nspawn 写了一个简单的调用脚本,
#!/bin/bash
# systemd-nspawn Linux 容器
# Author: Aknife(https://aknife.cn)
# Update: 2025/10/23
# ========== 容器配置 ==========
# 格式: "容器名称|容器路径|备注"
VIR_CONTAINERS=(
"lnmp|$HOME/Object/Virtual/lnmp|LNMP 环境"
)
# ========== Systemd容器管理函数 ==========
check_systemd_nspawn() {
if ! command -v systemd-nspawn &> /dev/null; then
echo "正在安装 systemd-nspawn..."
sudo apt update && sudo apt install -y systemd-container
if [ $? -ne 0 ]; then
echo "安装 systemd-nspawn 失败"
exit 1
fi
echo "systemd-nspawn 安装成功"
fi
}
# ======= 创建桥接网络 =======
create_bridge() {
BRIDGE_NAME="dockerNet"
BRIDGE_ADDR="10.0.0.1/24"
# 检查桥接是否已存在
if ! ip link show "$BRIDGE_NAME" >/dev/null 2>&1; then
echo "创建桥接 $BRIDGE_NAME..."
sudo ip link add name "$BRIDGE_NAME" type bridge
sudo ip addr add "$BRIDGE_ADDR" dev "$BRIDGE_NAME"
sudo ip link set "$BRIDGE_NAME" up
echo "桥接 $BRIDGE_NAME 已创建,IP: $BRIDGE_ADDR"
# 检测物理网卡
echo "正在检测可用物理网卡..."
all_ifaces=($(ls /sys/class/net | grep -v -E "lo|$BRIDGE_NAME|docker|veth"))
if [ ${#all_ifaces[@]} -eq 0 ]; then
echo "未找到物理网卡,请手动配置 NAT"
return
fi
# 只获取启用状态的物理网卡
up_ifaces=()
for iface in "${all_ifaces[@]}"; do
state=$(cat "/sys/class/net/$iface/operstate" 2>/dev/null)
if [[ "$state" == "up" ]]; then
up_ifaces+=("$iface")
fi
done
# 根据已启用的网卡数量决定策略
if [ ${#up_ifaces[@]} -eq 1 ]; then
selected_iface=${up_ifaces[0]}
echo "检测到单一 UP 网卡: $selected_iface,将作为 NAT 出口"
elif [ ${#up_ifaces[@]} -gt 1 ]; then
echo "检测到多个 UP 网卡,请选择作为 NAT 出口:"
select iface in "${up_ifaces[@]}"; do
if [[ -n "$iface" ]]; then
selected_iface="$iface"
break
fi
done
else
echo "未检测到处于 UP 状态的网卡,请选择一个物理网卡作为 NAT 出口:"
select iface in "${all_ifaces[@]}"; do
if [[ -n "$iface" ]]; then
selected_iface="$iface"
break
fi
done
fi
# 开启 IP 转发
echo "开启 IP 转发..."
sudo sysctl -w net.ipv4.ip_forward=1
# 配置 NAT 规则
echo "配置 NAT 规则,将 $BRIDGE_NAME 流量转发到 $selected_iface ..."
if ! sudo iptables -t nat -C POSTROUTING -s "$BRIDGE_ADDR" -o "$selected_iface" -j MASQUERADE 2>/dev/null; then
sudo iptables -t nat -A POSTROUTING -s "$BRIDGE_ADDR" -o "$selected_iface" -j MASQUERADE
fi
# FORWARD 规则
if ! sudo iptables -C FORWARD -s "$BRIDGE_ADDR" -o "$selected_iface" -j ACCEPT 2>/dev/null; then
sudo iptables -A FORWARD -s "$BRIDGE_ADDR" -o "$selected_iface" -j ACCEPT
fi
if ! sudo iptables -C FORWARD -d "$BRIDGE_ADDR" -m state --state RELATED,ESTABLISHED -i "$selected_iface" -j ACCEPT 2>/dev/null; then
sudo iptables -A FORWARD -d "$BRIDGE_ADDR" -m state --state RELATED,ESTABLISHED -i "$selected_iface" -j ACCEPT
fi
echo "网络桥接 $BRIDGE_NAME 配置完成,容器可通过 NAT 出口 $selected_iface 上网"
fi
}
delete_bridge() {
BRIDGE_NAME="dockerNet"
BRIDGE_ADDR="10.0.0.1/24"
# 检测物理网卡
interfaces=($(ls /sys/class/net | grep -v -E "lo|$BRIDGE_NAME|docker|veth"))
selected_iface=${interfaces[0]}
# 删除 NAT 规则
if sudo iptables -t nat -C POSTROUTING -s "$BRIDGE_ADDR" -o "$selected_iface" -j MASQUERADE 2>/dev/null; then
sudo iptables -t nat -D POSTROUTING -s "$BRIDGE_ADDR" -o "$selected_iface" -j MASQUERADE
echo "已删除 NAT 规则"
fi
# 删除 FORWARD 规则
if sudo iptables -C FORWARD -s "$BRIDGE_ADDR" -o "$selected_iface" -j ACCEPT 2>/dev/null; then
sudo iptables -D FORWARD -s "$BRIDGE_ADDR" -o "$selected_iface" -j ACCEPT
echo "已删除 FORWARD 出站规则"
fi
if sudo iptables -C FORWARD -d "$BRIDGE_ADDR" -m state --state RELATED,ESTABLISHED -i "$selected_iface" -j ACCEPT 2>/dev/null; then
sudo iptables -D FORWARD -d "$BRIDGE_ADDR" -m state --state RELATED,ESTABLISHED -i "$selected_iface" -j ACCEPT
echo "已删除 FORWARD 入站规则"
fi
# 删除网桥
if ip link show "$BRIDGE_NAME" >/dev/null 2>&1; then
sudo ip link set "$BRIDGE_NAME" down
sudo ip link delete "$BRIDGE_NAME" type bridge
echo "已删除网桥 $BRIDGE_NAME"
else
echo "网桥 $BRIDGE_NAME 不存在"
fi
}
# ========== 主逻辑 ==========
case "$1" in
"list")
check_systemd_nspawn
create_bridge
# 显示所有容器状态
echo "容器列表:"
echo "-------------------------------------------"
for container in "${VIR_CONTAINERS[@]}"; do
name=$(echo "$container" | cut -d'|' -f1)
path=$(echo "$container" | cut -d'|' -f2)
desc=$(echo "$container" | cut -d'|' -f3)
printf "%-15s %-20s " "$name" "$desc"
if [ -d "$path" ]; then
if pgrep -f "systemd-nspawn.*-D.*$path" > /dev/null; then
echo "[运行中]"
else
echo "[未运行]"
fi
fi
done
echo "-------------------------------------------"
;;
"start")
target="$2"
found=false
for container in "${VIR_CONTAINERS[@]}"; do
name=$(echo "$container" | cut -d'|' -f1)
path=$(echo "$container" | cut -d'|' -f2)
if [ "$name" = "$target" ]; then
found=true
# 检查是否在运行
if pgrep -f "systemd-nspawn.*-D.*$path" > /dev/null; then
echo "容器 '$name' 已经在运行中"
else
if [ -d "$path" ]; then
echo "启动容器: $name"
sudo setsid systemd-nspawn -D "$path" --boot --network-veth --network-bridge="dockerNet" --quiet > "/tmp/container-${name}.log" 2>&1 &
fi
fi
break
fi
done
;;
"run")
target="$2"
found=false
for container in "${VIR_CONTAINERS[@]}"; do
name=$(echo "$container" | cut -d'|' -f1)
path=$(echo "$container" | cut -d'|' -f2)
if [ "$name" = "$target" ]; then
found=true
if [ -d "$path" ]; then
echo "进入容器: $name"
# 找到 nspawn 主进程
nspawn_pid=$(pgrep -f "systemd-nspawn.*$path" | head -n1)
if [ -n "$nspawn_pid" ]; then
init_pid=$(pgrep -P "$nspawn_pid" | head -n1)
if [ -n "$init_pid" ]; then
sudo nsenter -t "$init_pid" -a /bin/bash
else
echo "容器未在运行,请先启动容器: $name"
fi
else
echo "容器未在运行,请先启动容器: $name"
fi
fi
break
fi
done
;;
"stop")
target="$2"
found=false
for container in "${VIR_CONTAINERS[@]}"; do
name=$(echo "$container" | cut -d'|' -f1)
path=$(echo "$container" | cut -d'|' -f2)
if [ "$name" = "$target" ]; then
found=true
if pgrep -f "systemd-nspawn.*-D.*$path" > /dev/null; then
sudo pkill -f "systemd-nspawn.*-D.*$path"
echo "容器 '$name' 已停止"
else
echo "容器 '$name' 未在运行"
fi
break
fi
done
;;
"delnet")
delete_bridge
;;
*)
if [ -z "$1" ]; then
echo "容器管理命令:"
echo " list 容器列表"
echo " start 启动容器"
echo " stop 停止容器"
echo " run 进入容器"
echo " delnet 删除网络"
echo ""
exit 1
fi
;;
esac
大概使用记录
aknife@Deepin25:~$ docker
容器管理命令:
list 容器列表
start 启动容器
stop 停止容器
run 进入容器
delnet 删除网卡
aknife@Deepin25:~$ docker list
创建桥接 dockerNet...
桥接 dockerNet 已创建,IP: 10.0.0.1/24
正在检测可用物理网卡...
检测到单一 UP 网卡: enp0s31f6,将作为 NAT 出口
开启 IP 转发...
net.ipv4.ip_forward = 1
配置 NAT 规则,将 dockerNet 流量转发到 enp0s31f6 ...
网络桥接 dockerNet 配置完成,容器可通过 NAT 出口 enp0s31f6 上网
容器列表:
-------------------------------------------
lnmp LNMP 环境 [未运行]
-------------------------------------------
aknife@Deepin25:~$ docker list
容器列表:
-------------------------------------------
lnmp LNMP 环境 [未运行]
-------------------------------------------
aknife@Deepin25:~$ docker start lnmp
启动容器: lnmp
aknife@Deepin25:~$ docker list
容器列表:
-------------------------------------------
lnmp LNMP 环境 [运行中]
-------------------------------------------
aknife@Deepin25:~$ docker run lnmp
进入容器: lnmp
root@lnmp:/# exit
exit
aknife@Deepin25:~$ docker stop lnmp
容器 'lnmp' 已停止
aknife@Deepin25:~$ docker list
容器列表:
-------------------------------------------
lnmp LNMP 环境 [未运行]
-------------------------------------------
aknife@Deepin25:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 10.0.0.0/24 anywhere
ACCEPT all -- anywhere 10.0.0.0/24 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
aknife@Deepin25:~$ docker delnet
已删除 NAT 规则
已删除 FORWARD 出站规则
已删除 FORWARD 入站规则
已删除网桥 dockerNet
aknife@Deepin25:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Popular Events
More
我想用pgsql17但是deepin包里没有,有人能帮帮忙吗?或者教教我怎么用玲珑我自己试试做