跳到主要内容

Docker 配置

安装

  • Linux:
# 下载并执行 Docker 官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh 或 wget https://get.docker.com -O get-docker.sh
sudo sh get-docker.sh

# 启动 Docker 服务
sudo systemctl start docker

# 下载 Docker Compose 当前稳定版本
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • Windows
    1. 下载Docker Desktop
    2. 如果卡在 'verifying packages' 则需要切换网络环境
    3. 选择启用 WSL 2 和 Hyper-V,跳过登录 Docker Hub 账户
    4. 在图形化界面中查看和管理各容器

docker网络配置

拉取不了镜像可用

  1. 写入配置文件
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com",
"https://registry.cn-hangzhou.aliyuncs.com"
]
}
EOF
  1. sudo chmod 644 /etc/docker/daemon.json
  2. systemctl daemon-reload
  3. systemctl restart docker

docker传输

本地存在网络环境,但服务器没有,上一方案尝试后仍然拉取不了 docker 时可用

  • 本地下载 docker(napcat,mihomo,mysql,mongodb 可用)
  • docker pull mlikiowa/napcat-docker:latest
  • docker save mlikiowa/napcat-docker:latest -o napcat-docker_latest.tar
  • scp -i xxx\lrobot.pem napcat-docker_latest.tar user@ip:/home/ubuntu/
  • 切换到服务器命令行
  • sudo docker load -i /home/ubuntu/napcat-docker_latest.tar
  • 加载成功后可删除对应 tar

热更新与 docker 重启冲突

  • 倘若更新的是 docker 卷内的内容(volumes),docker 会自动同步到容器内
  • 但静态引用此内容的地方无法更新(如静态引用 logic.data,config 等等)
  • 此时使用docker compose up --build -d lrobot,由于文件内容无变化(更新已经同步到 docker 内部了)导致重启不重启,静态引用不更新
  • 此时直接docker compose restart lrobot重启容器即可

报错:Unknownkey

  • docker desktop 加载失败,报错
  • 参考方法
wsl -d docker-desktop
cat /etc/wsl.conf
vi /etc/wsl.conf
  • 注释掉crossDistro = true并退出
  • wsl --shutdown

报错:端口占用

  • 发现启动时 docker 的自用端口被随机占用,使用以下代码解决
  • netsh interface ipv4 show excludedportrange protocol=tcp 显示 5921-5925 在其中
  • netsh int ipv4 set dynamic tcp start=49152 num=16384
  • netsh int ipv6 set dynamic tcp start=49152 num=16384
  • 重启电脑

相关知识

image:安装包;container:进程;registry:软件商店

  1. Docker: Docker 是一个开源的应用容器引擎,采用容器化技术,比虚拟机占用更少资源
  2. Image: 只读的容器模板,包含代码、运行时、库文件、环境变量和配置文件,主要由 Dockerfile 文件定义,也可以从镜像仓库拉取
  3. Registry: 存储和分发镜像的仓库,用于存储镜像
  4. Container: 镜像的实例,由 Image 创建,一个镜像可创建多个容器。容器可以被创建、启动、停止、删除、暂停
  5. Dockerfile: 一个文本文件,包含创建镜像的所有指令
  6. Compose: 定义和运行多容器的工具

常用命令

repo:用户;tag:仓库名;app:容器名

镜像
  • docker images 本地镜像列表
  • docker pull repo:tag 拉取镜像
  • docker save repo:tag -o xx.tar 导出离线包
  • docker load -i xx.tar 导入离线包
容器
  • docker ps -a 查看所有容器
  • docker start/stop/restart app 启停容器
  • docker rm -f app 强制删除
  • docker exec -it app bash 进容器排障
  • docker stats 实时资源占用
  • docker logs app 查看日志
  • docker logs --tail 50 app 查看最后 50 条
  • xx + -d 后台启动
多容器
  • docker compose up --build 构建镜像并启动容器
  • 其他指令比单容器多一个 compose,使用的是服务名而不是容器名
  • 本项目中,服务名=指定的容器名,所以不用 compose 也可以
清理
  • docker system prune -a --volumes 清理全部未用镜像/容器/网络/卷(谨慎使用)