Debian13配置nerdctl容器
一、环境准备
更新apt阿里云源
deb https://mirrors.aliyun.com/debian/ trixie main non-free non-free-firmware contrib
deb-src https://mirrors.aliyun.com/debian/ trixie main non-free non-free-firmware contrib
deb https://mirrors.aliyun.com/debian-security/ trixie-security main
deb-src https://mirrors.aliyun.com/debian-security/ trixie-security main
deb https://mirrors.aliyun.com/debian/ trixie-updates main non-free non-free-firmware contrib
deb-src https://mirrors.aliyun.com/debian/ trixie-updates main non-free non-free-firmware contrib
deb https://mirrors.aliyun.com/debian/ trixie-backports main non-free non-free-firmware contrib
deb-src https://mirrors.aliyun.com/debian/ trixie-backports main non-free non-free-firmware contrib
安装常用软件
apt install vim ufw containerd
systemctl enable containerd
关闭 IPv6 sysctl 配置
vim /etc/sysctl.d/99-disable-ipv6.conf
#写入下面内容
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
重载 sysctl 配置
sysctl --system
验证是否生效
# 返回 1 = 已关闭;0=开启
sysctl net.ipv6.conf.all.disable_ipv6
配置防火墙ufw
vim /etc/default/ufw
# 修改前
# DEFAULT_FORWARD_POLICY="DROP"
# IPV6=yes
# 修改后
IPV6=no
DEFAULT_FORWARD_POLICY="ACCEPT"
配置转发
vim /etc/ufw/before.rules
# End required lines 插入下面内容
-A ufw-before-forward -d 172.20.0.0/24 -j ACCEPT
-A ufw-before-forward -s 172.20.0.0/24 -j ACCEPT
重新加载 UFW
ufw reload
ufw disable && ufw enable
二、配置容器
下载nerdctl
#下载
wget https://github.com/containerd/nerdctl/releases/download/v2.3.5/nerdctl-2.3.5-linux-amd64.tar.gz
#解压
tar zxf nerdctl-2.3.5-linux-amd64.tar.gz -C /usr/local/bin
授权nerdctl
chmod +x /usr/local/bin/nerdctl
配置镜像加速
vim /etc/containerd/config.toml
写入下面内容
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = [
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://registry-1.docker.io"
]
创建目录和文件
mkdir -p /etc/containerd/certs.d/docker.io
vim /etc/containerd/certs.d/docker.io/hosts.toml
写入加速器地址:
server = "https://docker.io"
[host."https://xxxxx.mirror.swr.myhuaweicloud.com"]
capabilities = ["pull", "resolve"]
重启容器
systemctl restart containerd
配置cni
#创建目录
mkdir -p /opt/cni/bin /etc/cni/net.d
# 下载 CNI 插件
wget https://github.com/containernetworking/plugins/releases/download/v1.9.1/cni-plugins-linux-amd64-v1.9.1.tgz
# 解压到 /opt/cni/bin
tar -zxvf cni-plugins-linux-amd64-v1.9.1.tgz -C /opt/cni/bin/
# 查看是否有 bridge、host-local 等
ls /opt/cni/bin
编排
nerdctl compose up -d
nerdctl compose down
其他问题
debian自启问题
#启用用户 linger(允许用户服务开机自启)
loginctl enable-linger $USER
底层数据损坏,需要手动清理 containerd 存储
# 停止 containerd
systemctl stop containerd
#删除containerd配置镜像等所有
rm /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db
# 重启 containerd(会自动重建数据库,但会丢失所有容器记录)
systemctl start containerd
如果容器访问宿主机,例如:nginx反向代理宿主机端口
解决容器网络隔离办法:
#启动 nerdctl nginx 时添加
`--add-host=host.docker.internal:host‑gateway`
#也可以改成自定义域名 + 写死网关IP
`--add-host=www.xxx.com:172.20.0.1`
#`host‑gateway` 指向宿主机网关 IP,容器内用域名访问宿主机服务。
#`host.docker.internal` 这个域名指向宿主机的网关 IP,等于容器的 `/etc/hosts` 增加一条域名解析
# 编排增加格式
# 等价于命令行 --add-host=host.docker.internal:host-gateway
extra_hosts:
- "host.docker.internal:host-gateway"
restart: always
nginx配置修改
proxy_pass http://host.docker.internal:5001;
#或直接写容器的网关地址,上面所有配置不用配
proxy_pass http://172.20.0.1:5001;