docker使用笔记
docker使用笔记@
目录
[*]docker使用笔记
[*]一、基本概念
[*]1、镜像
[*]2、容器
[*]3、仓库
[*]3.1、公开
[*]3.2、私有
[*]二、安装
[*]1、win
[*]1.1、docker安装
[*]1.2、配置镜像加速
[*]2、Linux
[*]2.1、卸载旧版本
[*]2.2、直接安装
[*]2.3、国内源安装
[*]2.4、设置镜像加速
[*]2.5、启动及测试
[*]3、卸载软件
[*]三、镜像
[*]1、基本操作
[*]1.1、查看镜像
[*]1.2、删除镜像
[*]1.3、下载镜像
[*]四、容器
[*]五、应用
[*]1、ollama AI模型
[*]1.1、cpu
[*]1.2、Nvidia GPU
[*]1.3、AMD GPU
[*]2、Open WebUi 模型交互界面
[*]2、代码仓库
[*]2.1、GitLab
[*]2.2、Gitea
[*]3、远程桌面 Apache Guacamole
[*]六、问题记录
[*]6.1、系统证书问题
[*]6.2、守护进程(docker.service)启动失败
[*]6.3、docker DNS解析
[*]6.4、iptables 配置错误
一、基本概念
1、镜像
我们都知道,操作系统分为 内核 和 用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。
Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
2、容器
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。
前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为 容器存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
3、仓库
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 : 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,16.04, 18.04。我们可以通过 ubuntu:16.04,或者 ubuntu:18.04 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu,那将视为 ubuntu:latest。
仓库名经常以 两段式路径 形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 Docker Registry 的软件或服务。
3.1、公开
Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。
最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并拥有大量的高质量的 官方镜像。除此以外,还有 Red Hat 的 Quay.io;Google 的 Google Container Registry,Kubernetes 的镜像使用的就是这个服务;代码托管平台 GitHub 推出的 ghcr.io。
由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为 加速器。常见的有 阿里云加速器、DaoCloud 加速器 等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从 Docker Hub 下载速度会提高很多。在 安装 Docker 一节中有详细的配置方法。
国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库 等。
3.2、私有
除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。在 私有仓库 一节中,会有进一步的搭建私有 Registry 服务的讲解。
开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持 docker 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。
除了官方的 Docker Registry 外,还有第三方软件实现了 Docker Registry API,甚至提供了用户界面以及一些高级功能。比如,Harbor 和 Sonatype Nexus。
二、安装
参考: docker 从入门到实践
1、win
1.1、docker安装
[*]手动下载安装,点击以下 下载链接 下载 Docker Desktop for Windows
[*]使用 winget 安装
winget install Docker.DockerDesktop
1.2、配置镜像加速
Settings ->
Docker Engine 添加
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://mirror.gcr.io",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://dockerproxy.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
]
}点击 Apply & Restart 保存
2、Linux
2.1、卸载旧版本
# ubuntu / Debian
sudo apt-get remove docker \
docker-engine \
docker.io
############################################################
############################################################
# Fedora
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
############################################################
############################################################
# CentOS
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine2.2、直接安装
# ubuntu / Debian
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
############################################################
############################################################
# Fedora
sudo dnf -y install dnf-plugins-core
############################################################
############################################################
# CentOS
sudo yum install -y yum-utils
############################################################
############################################################
# Raspberry Pi
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
lsb-release \
software-properties-common2.3、国内源安装
# ubuntu
# 添加软件源的 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 官方源
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 向 sources.list 中添加 Docker 软件源
echo \
"deb https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 官方源
# echo \
# "deb https://download.docker.com/linux/ubuntu \
# $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt直接安装
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
############################################################
############################################################
# Debian
# 添加软件源的 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 官方源
# $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 向 sources.list 中添加 Docker 软件源
echo \
"deb https://mirrors.aliyun.com/docker-ce/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 官方源
# echo \
# "deb https://download.docker.com/linux/debian \
# $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# apt直接安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
############################################################
############################################################
# Fedora
# 添加 dnf 软件源
sudo dnf config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/fedora/docker-ce.repo
sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
# 官方源
# $ sudo dnf config-manager \
# --add-repo \
# https://download.docker.com/linux/fedora/docker-ce.repo
# 需要测试版本的 Docker 请使用以下命令
sudo dnf config-manager --set-enabled docker-ce-test
# 禁用测试版本的 Docker
sudo dnf config-manager --set-disabled docker-ce-test
# dnf 直接安装
sudo dnf update
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 安装指定版本的 Docker
dnf list docker-ce--showduplicates | sort -r
# docker-ce.x86_64 18.06.1.ce-3.fc28 docker-ce-stable
sudo dnf -y install docker-ce-18.06.1.ce
# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
############################################################
############################################################
# CentOS
# 添加 yum 软件源
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
# 如果需要测试版本的 Docker 请执行以下命令
sudo yum-config-manager --enable docker-ce-test
# 更新 yum 软件源缓存,并安装 docker-ce
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# CentOS8 额外设置
# 由于 CentOS8 防火墙使用了 nftables,但 Docker 尚未支持 nftables, 我们可以使用如下设置使用 iptables
# 更改 /etc/firewalld/firewalld.conf
# FirewallBackend=nftables
FirewallBackend=iptables
# 或者执行如下命令:
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --reload
# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud
############################################################
############################################################
# Raspberry Pi
# 软件源的 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/raspbian/gpg | sudo apt-key add -
# 官方源
# curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo apt-key add -
# 向 sources.list 中添加 Docker 软件源
sudo add-apt-repository \
"deb https://mirrors.aliyun.com/docker-ce/linux/raspbian \
$(lsb_release -cs) \
stable"
# 官方源
# sudo add-apt-repository \
# "deb https://download.docker.com/linux/raspbian \
# $(lsb_release -cs) \
# stable"
# apt直接安装
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# sudo sh get-docker.sh --mirror AzureChinaCloud2.4、设置镜像加速
# 配置镜像加速器
sudo vim /etc/docker/daemon.json
# 添加以下内容
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://mirror.gcr.io",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://dockerproxy.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
]
}
# 注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动
# 重新启动服务
sudo systemctl daemon-reload && sudo systemctl restart docker2.5、启动及测试
# ubuntu / Debian / Fedora / CentOS
# 启动
sudo systemctl enable docker && sudo systemctl start docker
# 建立 docker 用户组
sudo groupadd docker
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 测试 Docker 是否安装正确
docker run --rm hello-world3、卸载软件
# 卸载 Docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io -y && sudo apt-get autoremove -y
# 删除残留文件
sudo rm -rf /var/lib/docker三、镜像
1、基本操作
1.1、查看镜像
docker images -a1.2、删除镜像
docker rmi IDxxx1.3、下载镜像
# 直接下载,默认通过docker-hub
docker pull gitlab/gitlab-ce
# 指定镜像源下载四、容器
五、应用
1、ollama AI模型
部署本地ai模型最简单的办法,没有之一
ollama
ollama_docker
ollama_github
模型库
rts ollama.com/library 上可用的模型列表
以下是一些可以下载的示例模型
ModelParametersSizeDownloadLlama 3.370B43GBollama run llama3.3Llama 3.23B2.0GBollama run llama3.2Llama 3.21B1.3GBollama run llama3.2:1bLlama 3.2 Vision11B7.9GBollama run llama3.2-visionLlama 3.2 Vision90B55GBollama run llama3.2-vision:90bLlama 3.18B4.7GBollama run llama3.1Llama 3.1405B231GBollama run llama3.1:405bPhi 414B9.1GBollama run phi4Phi 3 Mini3.8B2.3GBollama run phi3Gemma 22B1.6GBollama run gemma2:2bGemma 29B5.5GBollama run gemma2Gemma 227B16GBollama run gemma2:27bMistral7B4.1GBollama run mistralMoondream 21.4B829MBollama run moondreamNeural Chat7B4.1GBollama run neural-chatStarling7B4.1GBollama run starling-lmCode Llama7B3.8GBollama run codellamaLlama 2 Uncensored7B3.8GBollama run llama2-uncensoredLLaVA7B4.5GBollama run llavaSolar10.7B6.1GBollama run solar1.1、cpu
# 启动容器
# Linux
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
#win
docker run -d -v D:/project/ollama:/ollama -p 11434:11434 --name ollama --restart always ollama/ollama
docker run -d -v D:/file/work/project/docker/ollama:/ollama -p 11434:11434 --name ollama --restart always ollama/ollama
# 运行模型
docker exec -it ollama ollama run gemma2:27b
# 停止运行
docker stop ollama
# 再次运行
docker start ollama && docker exec -it ollama ollama run gemma2:27b1.2、Nvidia GPU
# 安装(https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installation)
# 方法1
# 配置存储库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
# 安装 NVIDIA Container Toolkit 软件包
sudo apt-get install -y nvidia-container-toolkit
# 方法2
# 使用 Yum 或 Dnf 安装
# 配置存储库
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo \
| sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
# 安装 NVIDIA Container Toolkit 软件包
sudo yum install -y nvidia-container-toolkit
# 配置 Docker 使用 Nvidia 驱动程序
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# 启动容器
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# 运行模型
docker exec -it ollama ollama run llama31.3、AMD GPU
# 要使用 Docker 和 AMD GPU 运行 Ollama,请使用rocm标签和以下命令:
docker run -d --device /dev/kfd --device /dev/dri -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama:rocm
# 运行模型
docker exec -it ollama ollama run llama32、Open WebUi 模型交互界面
[*]运行 Open WebUI 并将其连接到 Ollama
docker run -d \
--name open-webui \
-p 3001:3000 \
-v open-webui-data:/app/backend/data \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
ghcr.io/open-webui/open-webui:main
docker run -d \
--name open-webui \
-p 3001:3000 \
-v open-webui-data:/mnt/sdcard/open_webui_data \
-e OLLAMA_BASE_URL=http://$(hostname -I | awk '{print $1}'):11434 \
ghcr.io/open-webui/open-webui:main
解释:
[*]-p 3000:3000:将 Open WebUI 的 3001 端口映射到宿主机的 3000 端口
[*]-v open-webui-data:/app/backend/data:持久化 WebUI 数据
[*]-e OLLAMA_BASE_URL=http://host.docker.internal:11434:设置 Ollama API 地址(Windows/macOS 使用 host.docker.internal,Linux 需改为宿主机 IP)。如果你使用的是 Linux 桌面环境,hostname -I | awk '{print $1}' 可以获取你的本机 IP,你也可以手动替换为 127.0.0.1 或实际 IP 地址。
[*]访问 Web 界面
2、代码仓库
2.1、GitLab
[*]下载镜像(也可以直接运行容器,运行时会自动下载镜像)
# 最新镜像
# amd
docker pull gitlab/gitlab-ce
# arm
docker pull zengxs/gitlab:latest
# 查询
docker images -a
[*]新建数据存储卷
如果要修改一个容器的配置或者查看它的日志,需要进入到容器里面,不是很方便。所以通常会给容器挂载数据卷,将容器内的重要目录,映射到宿主机中。
我们需要为 Gitlab 容器设置三个数据卷
mkdir -p /home/user/gitlab/config # 映射到 Glitlab 容器中的配置目录
mkdir -p /home/user/gitlab/logs # 映射到 Glitlab 容器中的日志目录
mkdir -p /home/user/gitlab/data # 映射到 Glitlab 容器中的数据目录
[*]运行容器
参数说明:
[*]-d:已守护进程的方式运行容器。这样就可以让 gitlab 服务在后台运行而不影响前台的操作。
[*]--hostname:设置主机名字。和我们上面给虚拟机设置的域名保持一致即可。如果是云服务器且绑定了域名,这里就是云服务器的域名。
[*]-p:gitlab 需要暴露三个端口,443 和 80 是访问 Gitlab 的 Web 页面,22 是使用 Git 管理仓库时用到,但是由于宿主机的 22 被我的 sshd 服务占用了,所以这里映射到了 23。
[*]--name:容器的名字
[*]--restart:当容器启动失败时总是尝试自动重启
[*]-v:挂载数据卷,这样就能方便修改为容器内服务的配置,同时方便做容器数据的迁移
# amd
docker run \
-d --hostname 10.0.19.29 \
-p 443:443 -p 80:80 -p 23:22 \
--name gitlab \
--restart always \
-v /home/user/gitlab/config:/etc/gitlab \
-v /home/user/gitlab/logs:/var/log/gitlab \
-v /home/user/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
# arm
docker run \
-d --hostname 10.0.19.29 \
-p 443:443 -p 80:80 -p 23:22 \
--name gitlab \
--restart always \
-v /home/user/gitlab/config:/etc/gitlab \
-v /home/user/gitlab/logs:/var/log/gitlab \
-v /home/user/gitlab/data:/var/opt/gitlab \
zengxs/gitlab
[*]查看运行日志
docker exec -it gitlab bash
# 查看 GitLab 初始化日志
gitlab-ctl tail
# 检查 nginx 服务状态
gitlab-ctl status nginx
# 如果未启动或失败,尝试手动启动:
gitlab-ctl start nginx
# 若启动失败,请查看 nginx 的错误日志:
gitlab-ctl tail nginx
# 如果日志显示配置文件有问题或服务启动失败,可以尝试重新配置 GitLab
gitlab-ctl reconfigure
[*]登录使用
# 获取 root 用户的初始密码
cat /home/user/gitlab/data/initial_root_password
# 浏览器搜索登录 10.0.19.29
# Preferences 设置为中文显示
2.2、Gitea
[*]运行容器:
docker run \
-d --hostname 10.0.11.154 \
--name=gitea \
-p 3001:3000 \
-p 23:22 \
-v /mnt/sdcard/gitea_data:/data \
gitea/gitea:latest参数解析:
[*]-d --hostname 10.0.11.154
设定容器的主机名(hostname)为 10.0.11.154,但请注意,Docker 的 --hostname 只影响容器内部,而不会影响网络上的访问。
[*]--name=gitea
指定容器名称为 gitea
[*]-p 3001:3000
将宿主机的 3000 端口映射到容器的 3001 端口
[*]-p 23:22
将宿主机的 2222端口映射到容器的 22 端口,映射到宿主机的 2222端口后,可以通过 ssh 连接 Gitea 容器, 注意 :宿主机 23 端口通常用于 Telnet,建议改用其他端口,例如 2222:22
ssh -p 23 user@宿主机IP
[*]-v /mnt/sdcard/gitea_data:/data
绑定存储卷,将宿主机的 /mnt/sdcard/gitea_data 目录映射到容器的 /data 目录。
/data 目录是 Gitea 的数据存储位置,包括 Git 仓库、数据库、配置等,确保数据持久化,即使删除容器数据不会丢失。
[*]gitea/gitea:latest
指定使用官方 Gitea Docker 镜像,版本为 latest(最新版本)
[*]访问 Web 界面
浏览器搜索登录 http://10.0.11.154:3000,并根据提示设置账户并安装。
3、远程桌面 Apache Guacamole
六、问题记录
6.1、系统证书问题
The repository 'https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic Release' no longer has a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.# 系统证书 (ca-certificates) 用于验证与仓库的 SSL/TLS 连接,确保连接的是合法服务器
sudo apt update
sudo apt install ca-certificates6.2、守护进程(docker.service)启动失败
提示如下错误:
docker.service: Start request repeated too quickly.
docker.service: Failed with result 'exit-code'.先查看详细错误日志
sudo journalctl -xe | grep docker
# Docker 在启动时需要通过 iptables 设置网络规则,创建 DOCKER 链,但由于 iptables 的配置或某些依赖丢失,导致失败
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to register "bridge" driver: failed to create NAT chain DOCKER: iptables failed: iptables --wait -t nat -N DOCKER: iptables v1.8.2 (nf_tables): CHAIN_ADD failed (No such file or directory): chain PREROUTING6.3、docker DNS解析
提示如下错误:
cat@lubancat:~$ docker start ollama && docker exec -it ollama ollama run ollama run llama3.2
ollama
pulling manifest
Error: pull model manifest: Get "https://registry.ollama.ai/v2/library/ollama/manifests/latest": dial tcp: lookup registry.ollama.ai on 8.8.8.8:53: read udp 172.17.0.2:60572->8.8.8.8:53: i/o timeout修改方式
sudo vim /etc/resolv.conf
# 注释 8.8.8.8
service docker restart6.4、iptables 配置错误
提示以下错误
systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2025-02-10 23:31:04 CST; 17s ago
Docs: https://docs.docker.com
Process: 3884 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
Main PID: 3884 (code=exited, status=1/FAILURE)运行以下命令,获取 Docker 启动失败的详细日志信息:
journalctl -u docker.service -xeDocker 启动失败的原因是 iptables 配置错误,特别是在创建 NAT 链时失败:
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to register "bridge" driver: failed to create NAT chain DOCKER: iptables failed: (exit status 4)修改方式
[*]尝试直接重置 iptables 规则,然后重启docker服务
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -X
sudo systemctl restart docker
[*]以上如果不能成功启动,检查修改防火墙框架
# 当前使用的防火墙框架
sudo update-alternatives --config iptables
# 打印如下 输入 1 选择 iptables-legacy
There are 2 choices for the alternative iptables (providing /usr/sbin/iptables).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/sbin/iptables-nft 20 auto mode
1 /usr/sbin/iptables-legacy 10 manual mode
2 /usr/sbin/iptables-nft 20 manual mode
Press <enter> to keep the current choice[*], or type selection number:
[*]重新加载并清除 iptables 规则,然后重启docker服务
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -X
sudo systemctl restart docker
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]