1   docker的基础命令操作 命令 功能 注释 docker ps 列出当前正在运行的容器 docker ps -a 列出所有容器(包括已停止的容器) docker logs container_name 查看指定容器的日志 docker inspect container_name/image 获取指定容器或镜像的详细信息 docker exec -it container_name /bin/bash docker exec -it container_name sh 进入指定容器的交互式终端 -i: 交互式操作 -t: 终端 -it:以交互式终端运行容器,例如 docker exec -it container_name bash docker stop container_name 停止一个或多个容器 docker kill container_name 立即停止一个或多个容器 直接发送 SIGKILL 信号给容器的主进程,导致容器立即停止 docker kill -s SIGTERM container_name等同于stop -s, --signal: 发送给容器的信号(默认为 SIGKILL) SIGKILL: 强制终止进程(默认信号) SIGTERM: 请求进程终止 SIGINT: 发送中断信号,通常表示用户请求终止 SIGHUP: 挂起信号,通常表示终端断开 docker rm container_name 删除一个或多个容器 docker rmi image-name:tag 删除一个或多个镜像 不加tag则会删除所有 docker run image-name --name container_name -d 启动一个新的容器并运行命令 docker start container_name 启动已停止的容器 docker restart container_name 重启一个容器 docker version 显示 Docker 客户端和守护进程的版本信息 docker network ls 列出所有 Docker 网络 docker volume ls 列出所有 Docker 卷 docker images ls 列出本地存储的所有镜像 docker compose -f docker-compose.yml up -d 启动多容器应用(从 docker-compose.yml 文件) -d:后台运行容器,例如 docker run -d ubuntu docker compose -f docker-compose.yml down 停止并删除由 docker-compose 启动的容器、网络等 docker compose logs -f docker-compose.yml 查看指定compose的运行日志 docker info 显示 Docker 系统的详细信息 docker stats 显示容器的实时资源使用情况 docker system df 查看docker各组件硬盘占用 docker builder prune -f 删除所有未被使用的构建缓存 -f:强制删除,跳过确认提示 docker builder prune --filter 'until=240h' 删除所有未被使用的构建缓存,并保留最近10天的缓存 docker image prune -a -f 强制删除所有未被使用的镜像 -a:所有镜像,不单只dangling镜像 -f:强制删除,跳过确认提示 docker container prune -f --volumes 删除所有停止运行的容器 --volumes:同时删除与容器关联的匿名卷,注意备份好数据 -f:强制删除,跳过确认提示 docker volume prune 删除所有未被挂载的卷 docker network prune 删除所有未使用的网络 docker system prune -f 清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像) -f:强制删除,跳过确认提示 docker system prune -a -f 比上面命令清理得更加彻底,没有容器使用Docker镜像都会被删掉 -f:强制删除,跳过确认提示
2   使用apt仓库为Debian安装docker 2.1   添加Docker的官方GPG密钥 1 2 3 4 5 6 apt update apt install ca-certificates -y install -m 0755 -d /etc/apt/keyrings wget https://download.docker.com/linux/debian/gpg -O /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc
2.2   添加Docker的官方仓库 1 2 3 4 5 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME " ) stable" | \ tee /etc/apt/sources.list.d/docker.list > /dev/null apt update
2.3   安装Docker 1 apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
2.4   验证Docker版本 1 2 docker -v docker version
2.5   修改Docker镜像源 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 mkdir -p /etc/dockertee /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://docker.1ms.run", "https://docker.mybacc.com", "https://dytt.online", "https://lispy.org", "https://docker.xiaogenban1993.com", "https://docker.yomansunter.com", "https://aicarbon.xyz", "https://666860.xyz", "https://docker.zhai.cm", "https://a.ussh.net", "https://hub.littlediary.cn", "https://hub.rat.dev", "https://docker.m.daocloud.io" ] } EOF
2.6   重启相关服务 1 2 systemctl daemon-reload systemctl restart docker
3   Docker部署Dockge(docker compose可视化管理) dockge容器运行是UTC世界时,指定环境变量或者同步宿主机的时区都是无法生效,容器日志纪录的时间戳就是UTC时间——Mr. Kin,2025-05-22 docker实现的终端功能只有简单shell命令,因此终端更多是使用docker相关命令,其余复杂的操作,还是推荐ssh连接到服务器进行操作。 /root/dockge_stacks
路径下任意文件夹的名称都是作为堆栈stack名称,显示在dockge网页管理后台上。其中,在文件夹内,docker-compose.yml
或者compose.yml
文件名称是必需,其他自定义文件名称,dockge将无法识别。
例如,/root/dockge_stacks/dockge
文件夹,在dockge网页管理后台上显示为dockge
。如果有多个服务器都需要安装dockge,文件夹名称可以加上-server
后缀以方便标识,例如dockge-server
。
创建stacks文件夹(建议加上-xxx
后缀以方便标识):1 mkdir -p /root/dockge_stacks/dockge
创建dockge
的docker-compose.yml
文件:nano /root/dockge_stacks/dockge/docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 services: dockge: image: louislam/dockge:latest container_name: dockge restart: unless-stopped ports: - 5001 :5001 volumes: - /var/run/docker.sock:/var/run/docker.sock - /root/dockge_data:/app/data - /root/dockge_stacks:/opt/stacks - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro environment: - DOCKGE_STACKS_DIR=/opt/stacks - DOCKGE_ENABLE_CONSOLE=true
进入到对应dockge-[xxx]
路径,运行dockge服务:docker compose -f docker-compose.yml up -d
。 访问dockge网页管理后台:http://10.10.10.10:5001
。初次访问会提示创建用户和密码。 4   Docker部署DDNS-GO 4.1   Docker宿主机配置一览 笔者是直接跟RustDesk server部署在同一个宿主机上。
硬件类别 配置 CPU 2核 内存 1GB SWAP 1GB 硬盘 5GB
4.2   创建开源版DDNS-GO的docker-compose.yml文件 1 2 3 4 5 6 7 8 services: ddns-go: image: jeessy/ddns-go:latest container_name: ddns-go restart: always network_mode: host volumes: - /root/ddns-go_data:/root
访问网页管理后台:http://10.10.10.10:9876 ,首次访问需要设置帐号和密码。
4.3   DDNS-GO的配置 选择DNS服务器:笔者用的是Dynv6
。Token查看:My Zones
->Instructions
->ddclient
->password
或者右上角帐号
->Keys
->HTTP Tokens
->Token
->Details
(这两个实际是相同,当然也可以Keys
中生成新的Token) TTL:保持默认的自动。 Ipv4:取消勾选「是否启动」 Ipv6勾选「是否启动」 获取IP方式:通过网卡获取 匹配正则表达式:留空 Domains:填写在Dynv6
申请得到的域名 其他保持默认,当前配置可以重命名保存,注意点击底下的保存按钮。若有其他局域网设备也需要做DDNS,则添加一个新的配置,局域网设备获取IPV6的方式需要支持EUI-64(IPv6后半部分包含ff:fe),具体参看通过命令获取IP参考 。 一般默认Linux系统的网卡配置就默认支持EUI-64,通过ip addr
查看具有8组长度(每组16位的十六进制数)的Ipv6地址。 ip -6 route | awk '{print $1}' | awk '/240:?/' | awk -F::/ '{print $1 ":填写后面四组的十六进制数,包含ff:fe"}'
5   Docker部署开源版RustDesk server 5.1   Docker宿主机配置一览 硬件类别 配置 CPU 2核 内存 1GB SWAP 1GB 硬盘 5GB
5.2   理解开源版RustDesk server端口用途 需要开放路由器防火墙和docker映射的端口一览:
TCP(21115, 21116, 21117, 21118, 21119)
UDP(21116)
hbbs监听端口:
21115(tcp):hbbs用作NAT类型测试 21116(tcp/udp):UDP是hbbs用作ID注册与心跳服务,TCP是hbbs用作TCP打洞与连接服务 21118(tcp):支持网页客户端 hbbr监听端口:
21117(tcp):hbbr用作Relay中继服务 21119(tcp):支持网页客户端 5.3   创建开源版RustDesk server的docker-compose.yml文件 为避免服务器被扫描到滥用,command建议添加-k _
参数,强制开启验证key。KEY对应文件为/root/rust_hbbs/id_ed25519.pub
和/root/rust_hbbs/id_ed25519
。rust客户端填写的KEY使用公钥文件内容即可id_ed25519.pub
。 hbbs中,command: hbbs -r
参数可以指定其他中继服务器(例如hbbr部署在另外一台服务器),就是:command: hbbs -r rustdesk.example.com:21117
。如果服务器是具有公网IP的,直接将rustdesk.example.com
改为服务器IP地址即可。如果是使用host
网络模式,也可以指定localhost:21117
。如果服务器带宽有限紧张,则不推荐开这个参数。让rustdesk默认走p2p就好,无法连接成功时,再填写relay服务器地址。 如果docker宿主机配置较差,推荐使用host
宿主机网络版,这样没有网络隔离,适用于需要高性能网络通信的场景。官方教程也是用的network_mode: "host"
。 5.3.1   host
宿主机网络版: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest command: hbbs -k _ volumes: - /root/rd_data:/root depends_on: - hbbr network_mode: "host" restart: unless-stopped hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest command: hbbr -k _ volumes: - /root/rd_data:/root network_mode: "host" restart: unless-stopped
5.3.2   rustdesk-net
隔离网络版: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 networks: rustdesk-net: external: false services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest command: hbbs -k _ volumes: - /root/rd_data:/root ports: - 21115 :21115 - 21116 :21116 - 21116 :21116/udp - 21118 :21118 depends_on: - hbbr networks: - rustdesk-net restart: unless-stopped hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest command: hbbr -k _ volumes: - /root/rd_data:/root ports: - 21117 :21117 - 21119 :21119 networks: - rustdesk-net restart: unless-stopped
6   Docker部署WAKE-ON-LAN(WOL) 技术方案一栏:
ghcr.io/trugamr/wol
镜像:提供WAKE-ON-LAN的基础功能traefik
镜像:提供WAKE-ON-LAN的web管理界面的反代服务,并提供帐号验证服务。因为ghcr.io/trugamr/wol
的WEB管理界面没有帐号验证功能。反代思路:traefik
的入口端口为7777,然后经过docker默认网桥地址172.17.0.1
访问wol
的7778端口。使用htpasswd
生成密码hash步骤:
1 2 3 4 apt install apache2-utils -y htpasswd -nb admin yourpassword admin:$apr1$YkxGZpGz$JyV8pyiwmryBZLO9uh8KW /
docker-compose.yml文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 services: wol: image: ghcr.io/trugamr/wol:latest container_name: wol restart: unless-stopped network_mode: host command: serve environment: WOL_CONFIG: | machines: - name: desktop mac: AA:BB:CC:DD:EE:FF ip: 192.168.1.10 # Optional, for status checking server: # Listen only on the bridge network listen: 172.17.0.1:7778 # Optional, defaults to :7777 ping: privileged: true # Optional, set to true if you need privileged ping labels: traefik.enable: true traefik.http.routers.wol.rule: PathPrefix(`/`) traefik.http.routers.wol.entrypoints: web traefik.http.middlewares.auth.basicauth.users: admin:$$apr1$$YkxGZpGz$$JyV8pyiwmryBZLO9uh8KW/ traefik.http.routers.wol.middlewares: auth traefik.http.services.wol.loadbalancer.server.port: 7778 traefik: image: traefik:latest container_name: traefik command: - --providers.docker=true - --providers.docker.exposedbydefault=false - --entrypoints.web.address=:7777 ports: - 7777 :7777 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro extra_hosts: - host.docker.internal:172.17.0.1
7   Docker部署code-server(VS Code in The Browser) 有帖子反馈打开较大的文件时,会比较卡顿。 并且插件扩展的提供渠道,也是社区维护的,但可以通过修改配置文件实现替换插件源地址为MS版本。 codercom/code-server :由Coder公司开发并维护的基于微软开源的Visual Studio Code (VS Code)构建的网页版开发环linuxserver/code-server :基于codercom/code-server的Docker容器化封装,支持多平台架构(x86-64/arm64)LinuxServer.io镜像依赖Coder的底层更新,因此功能迭代略滞后于官方。Coder镜像是LinuxServer.io镜像的上游版本。 关于哈希密码的生成:
在其他有装npm的机器上安装argon2-cli
包:npm install argon2-cli
生成哈希密码:echo -n "your-password" | npx argon2-cli -e 程序输出哈希(这整串就是哈希,但是填入docker-compose.yml文件中时,需要用$$
替换$
符号 ):$argon2i$v=19$m=4096,t=3,p=1$52d7tDyHRAFyqt+1k4fJsA$NvGfhHZ084v4rwGYTspIxP0uFX4qfeFRCVhsvKqN52E
docker-compose.yml文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 services: code-server: image: codercom/code-server:latest container_name: code-server environment: - TZ=Asia/Shanghai - HASHED_PASSWORD=$$argon2i$$v=19$$m=4096,t=3,p=1$$52d7tDyHRAFyqt+1k4fJsA$$NvGfhHZ084v4rwGYTspIxP0uFX4qfeFRCVhsvKqN52E - DEFAULT_WORKSPACE=/home/coder/project volumes: - /root/code-server-config:/config - /root/code-server-workspace:/home/coder/project ports: - 8080 :8080 restart: unless-stopped
访问网页管理后台:http://10.10.10.9:8080
8   Docker搭建Gitea 8.1   创建Gitea的mysql数据库数据文件夹 在root
账户路径下,创建mysql
文件夹和子目录:mkdir -p /root/mysql/conf.d
创建my.ini
:nano /root/mysql/conf.d/my.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 [client] default-character-set =utf8mb4socket =/var/lib/mysql/mysql.sock[mysql] default-character-set =utf8mb4socket =/var/lib/mysql/mysql.sock[mysqld] port =3306 user =mysqlsql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONdatadir =/var/lib/mysqlsocket =/var/lib/mysql/mysql.sockserver-id = 1 symbolic-links =0 max_connections =1000 character-set-server =utf8mb4collation-server = utf8mb4_unicode_cidefault-storage-engine =INNODBlower_case_table_names =1 max_allowed_packet =16 Mdefault-time_zone ='+8:00'
8.2   创建Gitea数据文件夹和配置文件 在root
账户路径下,创建gitea
文件夹和子目录:mkdir -p /root/gitea/gitea/conf
创建app.ini
文件:nano /root/gitea/gitea/conf/app.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 APP_NAME = Gitea: Git with a cup of teaRUN_MODE = prodWORK_PATH = /data/gitea[repository] ROOT = /data/git/repositories[repository.local] LOCAL_COPY_PATH = /data/gitea/tmp/local-repo[repository.upload] TEMP_PATH = /data/gitea/uploads[server] APP_DATA_PATH = /data/giteaDOMAIN = localhostSSH_DOMAIN = localhostHTTP_PORT = 3000 ROOT_URL = http://192.168 .1.10 :3000 /DISABLE_SSH = false SSH_PORT = 22 SSH_LISTEN_PORT = 22 LFS_START_SERVER = true LFS_JWT_SECRET =OFFLINE_MODE = true [database] PATH = /data/gitea/gitea.dbDB_TYPE = mysqlHOST = database:3306 NAME = giteaUSER = giteaPASSWD = normalpdxxxLOG_SQL = false SSL_MODE = disable[mailer] ENABLED = false [openid] ENABLE_OPENID_SIGNIN = true ENABLE_OPENID_SIGNUP = true [cron.update_checker] ENABLED = false [indexer] ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve[session] PROVIDER_CONFIG = /data/gitea/sessions[picture] AVATAR_UPLOAD_PATH = /data/gitea/avatarsREPOSITORY_AVATAR_UPLOAD_PATH = /data/gitea/repo-avatars[attachment] PATH = /data/gitea/attachments[log] MODE = consoleLEVEL = infoROOT_PATH = /data/gitea/log[security] INSTALL_LOCK = true INTERNAL_TOKEN =PASSWORD_HASH_ALGO = pbkdf2SECRET_KEY =REVERSE_PROXY_LIMIT = 1 REVERSE_PROXY_TRUSTED_PROXIES = *[service] REGISTER_EMAIL_CONFIRM = false ENABLE_NOTIFY_MAIL = false DISABLE_REGISTRATION = false ALLOW_ONLY_EXTERNAL_REGISTRATION = false ENABLE_CAPTCHA = false REQUIRE_SIGNIN_VIEW = false DEFAULT_KEEP_EMAIL_PRIVATE = false DEFAULT_ALLOW_CREATE_ORGANIZATION = true DEFAULT_ENABLE_TIMETRACKING = true NO_REPLY_ADDRESS = noreply.localhost[lfs] PATH = /data/git/lfs[repository.pull-request] DEFAULT_MERGE_STYLE = merge[repository.signing] DEFAULT_TRUST_MODEL = committer[oauth2] JWT_SECRET =
8.3   创建actions_runner配置文件 如果是本地搭建并只在本地使用,配件文件的host
设置为127.0.0.1
就能访问到gitea实例了。
1 nano /root/actions_runner_config.yaml
actions_runner_config.yaml
内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 log: level: info runner: file: .runner capacity: 2 envs: A_TEST_ENV_NAME_1: a_test_env_value_1 A_TEST_ENV_NAME_2: a_test_env_value_2 env_file: .env timeout: 3h insecure: false fetch_timeout: 5s fetch_interval: 2s labels: - "ubuntu-latest:docker://gitea/runner-images:ubuntu-latest" - "ubuntu-22.04:docker://gitea/runner-images:ubuntu-22.04" - "ubuntu-20.04:docker://gitea/runner-images:ubuntu-20.04" cache: enabled: true dir: "" host: "10.10.10.10" port: 18088 external_server: "" container: network: "" privileged: false options: workdir_parent: valid_volumes: [] docker_host: "" force_pull: true force_rebuild: false host: workdir_parent:
8.4   启动Docker-Compose runner
容器的环境变量environment
的Gitea实例地址GITEA_INSTANCE_URL
参数这里,不能用http://server
直接作为参数。虽然docker compose容器之间可以识别这个写法,但action runner
运行时无法识别该参数,使用checkout
脚本甚至都拉取不了源码到runner
容器内。
但参数设置错误也会导致如下错误:
1 2 3 level=error msg="Cannot ping the Gitea instance server" error="unknown: 500 Internal Server Error" level=error msg="Cannot ping the Gitea instance server" error="unavailable: dial tcp: lookup server on 127.0.0.11:53: server misbehaving"
runner
容器的环境变量environment
的runner注册令牌GITEA_RUNNER_REGISTRATION_TOKEN
参数步骤:在Gitea管理后台->Actions->Runners->创建Runner->创建新的令牌或者查看已有的令牌。
1 2 nano /root/docker-compose.yml docker compose -f docker-compose.yml up -d
docker-compose.yml
内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 networks: gitea: external: false services: server: image: gitea/gitea:nightly container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=mysql - GITEA__database__HOST=database:3306 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=normalpdxxx restart: always networks: - gitea volumes: - /root/gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22" depends_on: - database database: image: mysql:latest container_name: mysql restart: always ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=rootpdxxx - MYSQL_DATABASE=gitea - MYSQL_USER=gitea - MYSQL_PASSWORD=normalpdxxx networks: - gitea volumes: - /root/mysql/data:/var/lib/mysql - /root/mysql/conf.d:/etc/mysql/conf.d - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro runner: image: gitea/act_runner:nightly container_name: runner restart: always ports: - "18088:18088" environment: - CONFIG_FILE=/config.yaml - GITEA_INSTANCE_URL=http://10.10.10.10:3000 - GITEA_RUNNER_REGISTRATION_TOKEN=xxx_token networks: - gitea volumes: - /root/actions_runner_config.yaml:/config.yaml - /root/actions_runner:/data - /root/actions_runner_cache:/root/.cache - /var/run/docker.sock:/var/run/docker.sock - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro depends_on: - server
8.5   迁移Gitea的mysql数据库和git仓库数据 备份其他服务器上的Gitea的mysql数据库、git仓库数据和gitea其他资产数据。 进入mysql容器,并使用备份sql文件恢复mysql数据库。 停止docker-compose 迁移Gitea的git仓库数据和其他资产数据(例如avatars,actions_logs等),Git仓库数据路径:/root/gitea/git/repositories
Git仓库lfs数据路径:/root/gitea/git/lfs
Gitea资产数据路径:/root/gitea/gitea/attachments
/root/gitea/gitea/repo-archive
/root/gitea/gitea/actions_logs
/root/gitea/gitea/conf
/root/gitea/gitea/actions_artifacts
/root/gitea/gitea/jwt
/root/gitea/gitea/indexers
/root/gitea/gitea/tmp
/root/gitea/gitea/repo-avatars
/root/gitea/gitea/queues
/root/gitea/gitea/packages
/root/gitea/gitea/home
/root/gitea/gitea/avatars
/root/gitea/gitea/log
重新运行docker-compose 8.6   Gitea搭建和使用的踩坑 8.6.1   actions_runner容器无法正常启动,日志提示未注册runner 问题现象:docker logs runner
查看日志提示如下,同时,gitea管理后台查看runner也无法看到有正常在线的runner。
1 2 level=error msg="fail to invoke Declare" error="unknown: rpc error: code = Unauthenticated desc = unregistered runner" Error: Unknown: rpc error: code = Unauthenticated desc = unregistered runner
问题原因:/root/actions_runner
路径下有一个隐藏文件夹.runner
,该文件夹存储runner配置数据,但该数据是旧的,gitea实例无法识别,因此runner容器无法成功注册。
解决方法:
停止docker-compose 删除.runner
文件夹:rm -rf /root/actions_runner/.runner
重新运行docker-compose 之后在gitea管理后台就能看到正常在线的新runner了 8.6.2   “版本发布”下,自己上传的文件url错误 背景说明:Gitea构建在子局域网IP10.10.10.10
,然后外部网络访问该Gitea服务是通过IP192.168.1.10
(宿主机IP192.168.1.10
已设置路由表转发3000
端口到IP10.10.10.10
,即192.168.1.10:3000
->10.10.10.10:3000
)
问题现象:在版本发布内容中,上传的资产文件assets
下载路径链接指向http://10.10.10.10:3000/xxx.zip
。
问题原因:Gitea的配置文件app.ini
中的ROOT_URL
未设置参数,导致下载路径链接自动指向http://10.10.10.10:3000/xxx
。
解决方法:编辑app.ini
文件,将[server]
小节中的ROOT_URL
参数设置为http://192.168.1.10:3000
即可。
8.6.3   Gitea管理后台提示当前访问的url和app.ini配置url不同 问题现象:Gitea管理后台提示警告,你的app.ini
的ROOT_URL
是http://10.10.10.10:3000
,但当前访问的url是http://192.168.1.10:3000
。你应该正确设置ROOT_URL
,否则网络服务可能无法正常运行。
问题原因:Gitea的配置文件app.ini
中的ROOT_URL
未设置参数或者设置错误的url,导致下载路径链接自动指向http://10.10.10.10:3000/xxx
。
解决方法:编辑app.ini
文件,将[server]
小节中的ROOT_URL
参数设置为当前访问URL即可,例如http://192.168.1.10:3000
。
9   Docker搭建Redis 9.1   Redis容器清理缓存 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 docker exec -it redis /bin/bash redis-cli -h 127.0.0.1 -p 6379 redis-cli -h 127.0.0.1 -p 6379 -a redis keys * del key flushdb flushall
10   Docker搭建DataEase 请提前为宿主机安装好Docker以及配置好镜像源,这里不作介绍。
10.1   下载DataEase部署脚本。 最新的DataEase V1.x 部署脚本并解压(本文示例为v1.18.27版本)。
dataease-release-v1.18.27.tar.gz
和dataease-v1.18.27-online.tar.gz
这两个文件数据完全一致,随意下载,本人解压并比对过文件哈希值。
v2.x开源社区版不支持创建用户,代码层面写死只有一个admin账户,若有用户管理的需求,可以不用考虑v2.x版本或者考虑商业版的v2.x。
10.2   修改配置文件install.conf
安装模式模式修改为local
,端口这些自行根据需求改,如下配置文件是修改为8100。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 DE_BASE=/opt DE_PORT=8100 DE_ENGINE_MODE=local DE_DOCKER_SUBNET=172.19.0.0/16 DE_DOCKER_GATEWAY=172.19.0.1 DE_DORIS_FE_IP=172.19.0.198 DE_DORIS_BE_IP=172.19.0.199 DE_LOGIN_TIMEOUT=480 DE_INIT_PASSWORD=DataEase123456 DE_EXTERNAL_MYSQL=false DE_MYSQL_HOST=mysql DE_MYSQL_PORT=3306 DE_MYSQL_DB=dataease DE_MYSQL_USER=root DE_MYSQL_PASSWORD=Password123@mysql DE_MYSQL_PARAMS="autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true" DE_EXTERNAL_DORIS=false DE_DORIS_HOST=doris-fe DE_DORIS_PORT=9030 DE_DORIS_HTTPPORT=8030 DE_DORIS_DB=dataease DE_DORIS_USER=root DE_DORIS_PASSWORD=Password123@doris DE_EXTERNAL_KETTLE=false DE_CARTE_HOST=kettle DE_CARTE_PORT=18080 DE_CARTE_USER=cluster DE_CARTE_PASSWORD=cluster
10.2.1   不同安装模式的区别 DE_ENGINE_MODE=local 使用本地模式安装,DataEase 会自带 Doris 与 Kettle 组件,无需再做额外配置,但各组件均为单点,不具备高可用特性。 在此模式下,Excel 数据集、API 数据集以及定时同步的数据默认保存在自带的 Doris 组件中。
DE_ENGINE_MODE=simple 使用精简模式安装,系统不会额外安装 Doris 与 Kettle 组件,提供用户轻量级的应用系统,尤其是对接数据量较小的情况。 在此模式下,Excel 数据集或 API 数据集的相关数据存储在数据引擎中(默认配置自带的 MySQL 组件,用户可在系统管理界面配置数据引擎,数据引擎目前仅支持 MySQL 类型)。 注意:由于精简模式未配置 Kettle 与 Doris,故精简模式不提供定时同步模式。
10.3   安装DataEase 运行命令安装DataEase,并查看对应docker容器是否正常运行。
1 2 bash ./install.sh docker ps -a
10.4   创建DataEase的踩坑记录 10.4.1   doris-be容器状态一直为unhealthy 问题:doris-be容器状态一直为unhealthy,一直在尝试反复启动。docker logs doris-be
查看到如下日志输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 doris_role:be DEBUG >>>>>> FE_SERVERS=[fe1:172.19.0.198:9010] DEBUG >>>>>> BE_ADDR=[172.19.0.199:9050] DEBUG >>>>>> feIpArray = 172.19.0.198 DEBUG >>>>>> feEditLogPortArray = 9010 DEBUG >>>>>> masterFe = 172.19.0.198:9010 DEBUG >>>>>> be_addr = 172.19.0.199:9050 DEBUG >>>>>> Append the configuration [priority_networks = 172.19.0.0/24] to /opt/apache-doris/be/conf/fe.conf DEBUG >>>>>> registerMySQL = mysql -uroot -P9030 -h172.19.0.198 -e "alter system add backend '172.19.0.199:9050'" DEBUG >>>>>> registerShell = /opt/apache-doris/be/bin/start_be.sh & mysql -uroot -P9030 -h172.19.0.198 -e "show backends" | grep " 172.19.0.199 " | grep " 9050 " 10003 default_cluster 172.19.0.199 9050 -1 -1 -1 NULL NULL false false false 0 0.000 1.000 B 0.000 0.00 % 0.00 % 0.000 {"location" : "default" } java.net.NoRouteToHostException: No route to host (Host unreachable) {"lastStreamLoadTime" :-1,"isQueryDisabled" :false ,"isLoadDisabled" :false } 1 DEBUG >>>>>> The 0 time to register BE node, be_join_status=0 DEBUG >>>>>> run command /opt/apache-doris/be/bin/start_be.sh & DEBUG >>>>>> registered : 1 Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000' . ERROR 1105 (HY000) at line 1: errCode = 2, detailMessage = There is no scanNode Backend available.[10003: not alive] DEBUG >>>>>> The 1 time to check is_alive >>>>>> 1 ERROR 1105 (HY000) at line 1: errCode = 2, detailMessage = There is no scanNode Backend available.[10003: not alive]
可以查看上述日志输出提示Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000'.
原因:Doris作为分布式数据库,对于内存映射数量有要求,Linux系统默认参数值无法满足,例如PVE系统默认的vm.max_map_count=262144
。
解决方法1:请在运行doris容器的宿主机上设置vm.max_map_count
内核参数。若宿主机本身也是容器化的虚拟机,例如PVE的LXC容器,可以直接在PVE上运行命令修改参数。1 2 3 4 5 6 7 8 9 10 11 12 nano /etc/sysctl.conf vm.max_map_count=2000000 sysctl -p sysctl -w vm.max_map_count=2000000 sysctl vm.max_map_count
解决方法2:换DataEase v2版本,v2系列不需要部署Doris。 10.4.2   在DataEase添加Excel数据集后,预览数据界面无法加载,并一直提示Access denied for user 'root@172.19.0.4'
原因:修改过install.conf
的MySQL和Doris的密码都会导致出现该故障。据5939的issue 反馈该问题在1.18.23已修复,但本人使用1.18.27版本部署,修改密码仍会出现该问题。
解决方法:不修改install.conf
的MySQL和Doris的密码,直接使用模板预设的默认密码完成部署。
10.5   DataEase使用踩坑纪录(以下总结基本是基于V1版本) 变更/删除数据集,均会导致丢失仪表盘的过滤器参数 使用excel作为数据集的话,替换数据集时,不能存在任何计算字段。若存在计算字段,替换数据操作能成功,但是导入之后预览会报错:预览数据错误:执行SQL失败。可能因相关字段、表、数据集等元素发生变更,请检查->SQL ERRORerrCode = 2, detailMessage = Sql parser can't convert the result to array, please check your sql.
预览数据报错解决方式:复制保存计算字段代码逻辑之后,删除已有的计算字段,并重建计算字段。 仪表盘的视图在超过1000条数据时则无法全部导出excel表格(比如实际导出的excel表格行数为1001,有一行是表头) excel数据源若有几万行,则无法成功导入dataease作为数据集,在数据同步阶段会失效(可能是内存溢出的问题,有待排查验证) V2社区开源版不支持创建多用户 Dataease短链访问:手机浏览器访问提示空白模板(实测安卓火狐和ios的saffasi都遇到一样的情况)。短链解析是未能返回正确的字符串。解决方法:手机移动端需要指定参数——PC端网站,才能解析正常。 11   Docker Desktop(Windows) 11.1   Docker Unexpected error 问题:无法启用Docker Desktop,提示报错Docker Unexpected error
。
原因:之前有安装并卸载过Docker Desktop。重新安装Docker Desktop有可能触发此问题。
解决方法:
1 2 3 wsl --unregister docker-desktop wsl --unregister docker-desktop-data
12   参考文献 [1] Docker Unexpected error[EB/OL]. https://github.com/docker/for-win/issues/14034 . [2] Install Docker Engine on Debian[EB/OL]. https://docs.docker.com/engine/install/debian/#install-using-the-repository . [3] DockerHub 国内加速镜像列表[EB/OL]. https://github.com/dongyubin/DockerHub . [4] Docker 容器使用[EB/OL]. https://www.runoob.com/docker/docker-container-usage.html . [5] [Question]配置doris数据源提示错误:Access denied for user 'root@172.19.0.4 ' (using password: YES)[EB/OL]. https://github.com/dataease/dataease/issues/5939 . [6] 安装模式[EB/OL]. https://dataease.io/docs/v1/installation/installation_mode/#11 . [7] Docker Build Cache 缓存清理[EB/OL]. https://blog.csdn.net/catoop/article/details/128002962 . [8] docker下redis容器清理缓存[EB/OL]. https://blog.csdn.net/weixin_44662304/article/details/114694451 . [9] “版本发布”下,自己上传的文件url错误[EB/OL]. https://forum.gitea.com/t/url/8030/1 . [10] 反向代理[EB/OL]. https://docs.gitea.com/zh-cn/administration/reverse-proxies . [11] 使用 Docker 安装[EB/OL]. https://docs.gitea.com/zh-cn/next/installation/install-with-docker . [12] Act Runner[EB/OL]. https://docs.gitea.com/zh-cn/next/usage/actions/act-runner . [13] 备份与恢复[EB/OL]. https://docs.gitea.com/zh-cn/next/administration/backup-and-restore . [14] 求助:Docker-compose部署act_runner出现错误[EB/OL]. https://forum.gitea.com/t/docker-compose-act-runner/8525 . [15] Runner Will Not Register via Docker Compose[EB/OL]. https://gitea.com/gitea/act_runner/issues/550 . [16] runner: level=error msg="Cannot ping the Gitea instance server" error="unknown: 500 Internal Server Error"[EB/OL]. https://gitea.com/gitea/act_runner/issues/400 . [17] 使用docker-compose 部署 MySQL(所有版本通用)[EB/OL]. https://blog.csdn.net/weixin_44606481/article/details/132840940 . [18] Can I store my password hashed?[EB/OL]. https://github.com/coder/code-server/blob/main/docs/FAQ.md#can-i-store-my-password-hashed . [19] 【学习笔记 - code-server】通过docker-compose配置code-server(一)[EB/OL]. https://blog.csdn.net/kirigirihitomi/article/details/132859159 . [20] 完全免费利用家宽IPV6和个人电脑搭建rustdesk-server-windows服务器实现远程控制[EB/OL]. https://www.npspro.cn/27999.html . [21] docker-compose自建RustDesk远程控制服务器 [EB/OL]. https://www.cnblogs.com/zwgbk/p/16648073.html . [22] 安装[EB/OL]. https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-oss/install/ . [23] DDNS-GO[EB/OL]. https://github.com/jeessy2/ddns-go . [24] wol/examples/reverse-proxy.yml[EB/OL]. https://github.com/Trugamr/wol/blob/main/examples/reverse-proxy.yml .