
一个轻量级多工具Docker镜像,主要用于:
mkcert + certify)mkhost)+ 模板delhost)senv)notifierd + notify + 主机docknotify)docker-cli + compose + lazydocker)netx、dig、mtr、traceroute、nmap等)git、jq、yq、rg、fd、sqlite、shellcheck、nano等)mkcertcertify扫描/etc/share/vhosts/**下的虚拟主机并生成:
.p12文件)example.com.conf → example.com + *.example.com)localhost、127.0.0.1、::1CAROOT=/etc/share/rootCA提供稳定CA根证书mkhost使用预定义模板生成Nginx/Apache虚拟主机配置/etc/share/runtime-versions.json(可通过RUNTIME_VERSIONS_DB覆盖)ACTIVE_PHP_PROFILE、ACTIVE_NODE_PROFILE、APACHE_ACTIVE)age + sopssenv提供.env ↔ .env.enc的简洁工作流./.sops.yaml(最高优先级)/etc/share/sops下的全局回退配置/密钥(可挂载)notifierd监听TCP(默认9901)并使用前缀(默认__HOST_NOTIFY__)向标准输出发送稳定的单行事件notify向容器内的notifierd发送事件docknotify可从主机向容器推送事件docker-cli + composelazydocker(需挂载docker socket)netx(工具集包装器)curl、wget、ping、ncdig/nslookup(bind-tools)iproute2、traceroute、mtrnmapgit + gitx(工具集)jq、yqripgrep (rg)、fdsqlite + sqlitex(工具集)shellcheckzip、unzip、tree、ncdunano作为默认EDITOR和VISUAL/etc/nanorc配置为在可用时加载语***则chromacat、figlet、show-banner shell钩子| 命令 | 用途 |
|---|---|
mkcert | 本地CA + 受信任TLS证书 |
certify | 扫描虚拟主机并生成服务器/客户端证书 |
mkhost | 生成虚拟主机配置(Nginx/Apache)+ 可选Node compose |
delhost | 删除域名的虚拟主机配置(Nginx/Apache/Node yaml) |
senv | SOPS/Age工作流(.env + .env.enc) |
lazydocker | Docker终端用户界面(需docker socket) |
notify | 向notifierd发送通知 |
notifierd | TCP → 标准输出桥接(用于主机监控) |
gitx | Git辅助命令行工具 |
chromacat | 彩色输出 |
sqlitex | SQLite辅助命令行工具 |
netx | 网络辅助包装器 |
本镜像设计为可将所有生成的+持久化工件保存在单个configuration/文件夹中,并挂载到容器内。
经验法则:
- 若容器需在目录中生成/更新文件(
certify、mkhost、senv init/keygen),则挂载为读写(RW)。- 若仅需"只读使用"(适用于共享密钥仓库),则挂载为只读(RO)。
. ├─ configuration/ │ ├─ apache/ # 生成/管理的Apache虚拟主机(*.conf) │ ├─ nginx/ # 生成/管理的Nginx虚拟主机(*.conf) │ ├─ ssl/ # 生成的证书(.pem、.p12、密钥) │ ├─ rootCA/ # mkcert CA存储(跨重建持久化) │ └─ sops/ # 全局SOPS Model B(持久化) │ ├─ age.keys # 全局Age密钥(回退) │ ├─ .sops.yaml # 全局回退配置(senv init在可写时创建) │ ├─ keys/ # 每个项目的密钥 │ │ ├─ projectA.age.keys │ │ └─ projectB.age.keys │ └─ config/ # 可选的每个项目配置 │ ├─ projectA.sops.yaml │ └─ projectB.sops.yaml │ ├─ secrets-repo/ # 可选共享加密环境存储(通常为RO挂载) │ ├─ projectA/ │ │ └─ .env.enc │ └─ projectB/ │ └─ prod/.env.enc │ └─ docker-compose.yml
| 主机路径 | 容器路径 | 用途 |
|---|---|---|
./configuration/apache | /etc/share/vhosts/apache | mkhost、certify |
./configuration/nginx | /etc/share/vhosts/nginx | mkhost、certify |
./configuration/ssl | /etc/mkcert | certify、mkcert |
./configuration/rootCA | /etc/share/rootCA | mkcert(CA存储) |
./configuration/sops | /etc/share/sops | senv init、senv keygen、senv enc/dec/edit |
./secrets-repo | /etc/share/vhosts/sops | senv dec --in=...(别名输入源) |
/var/run/docker.sock | /var/run/docker.sock | docker、lazydocker |
yamlservices: tools: image: infocyph/tools:latest container_name: docker-tools volumes: - ./configuration/apache:/etc/share/vhosts/apache - ./configuration/nginx:/etc/share/vhosts/nginx - ./configuration/ssl:/etc/mkcert - ./configuration/rootCA:/etc/share/rootCA - ./configuration/sops:/etc/share/sops - ./secrets-repo:/etc/share/vhosts/sops:ro - /var/run/docker.sock:/var/run/docker.sock environment: - TZ=Asia/Dhaka # - NOTIFY_TCP_PORT=9901 # - NOTIFY_PREFIX=__HOST_NOTIFY__ # - NOTIFY_TOKEN=
使用方式:
docker run --rm ... infocyph/tools certifynotifierdbashdocker run --rm -it \ -v "$(pwd)/configuration/apache:/etc/share/vhosts/apache" \ -v "$(pwd)/configuration/nginx:/etc/share/vhosts/nginx" \ -v "$(pwd)/configuration/ssl:/etc/mkcert" \ -v "$(pwd)/configuration/rootCA:/etc/share/rootCA" \ -v "$(pwd)/configuration/sops:/etc/share/sops" \ -v /var/run/docker.sock:/var/run/docker.sock \ infocyph/tools:latest
容器启动时,入口点会运行certify(尽力而为)。其流程:
/etc/share/vhosts/**下所有*.conf文件.conf的基名)*.domain)localhost、127.0.0.1、::1mkcert生成服务器和客户端证书| 文件名 | 生成的域名 |
|---|---|
test.local.conf | test.local、*.test.local |
example.com.conf | example.com、*.example.com |
internal.dev.site.conf | internal.dev.site、*.internal.dev.site |
所有证书写入/etc/mkcert。
| 证书类型 | 生成的文件 |
|---|---|
| Apache(服务器) | apache-server.pem、apache-server-key.pem |
| Apache(客户端) | apache-client.pem、apache-client-key.pem |
| Nginx(服务器) | nginx-server.pem、nginx-server-key.pem |
| Nginx(代理) | nginx-proxy.pem、nginx-proxy-key.pem |
| Nginx(客户端) | nginx-client.pem、nginx-client-key.pem、nginx-client.p12 |
mkhost是"域名设置向导",可生成:
/etc/share/vhosts/nginx/<domain>.conf/etc/share/vhosts/apache/<domain>.conf/etc/share/vhosts/node/<token>.yaml运行方式:
bashdocker exec -it docker-tools mkhost
它运行9步引导流程(PHP与Node略有不同):
域名(验证)
应用类型:PHP 或 Node
服务器类型(仅PHP):Nginx 或 Apache
HTTP/HTTPS模式(保留HTTP、重定向或HTTPS)
文档根目录(/app/<path>)
客户端请求体大小
运行时版本选择:
若启用HTTPS:可选客户端证书验证(双向TLS)
若启用HTTPS,mkhost会自动触发certify以确保所需证书存在。
mkhost将"活动选择"存储到环境变量中(供server包装器启用compose配置文件使用)。可查询/重置这些值:
bashmkhost --RESET mkhost --ACTIVE_PHP_PROFILE mkhost --ACTIVE_NODE_PROFILE mkhost --APACHE_ACTIVE
--RESET:清除所有活动选择。--ACTIVE_PHP_PROFILE:打印所选PHP配置文件(若选择PHP)。--ACTIVE_NODE_PROFILE:打印所选Node配置文件(若选择Node)。--APACHE_ACTIVE:当选择Apache模式时打印apache。delhost删除域名的生成文件:
/etc/share/vhosts/nginx/<domain>.conf/etc/share/vhosts/apache/<domain>.conf/etc/share/vhosts/node/<token>.yaml(token为域名的安全slug)运行方式:
bashdocker exec -it docker-tools delhost example.com
交互模式(无参数):
bashdocker exec -it docker-tools delhost
行为:
y/N)2退出(对脚本有用)初始化(仅在可写/挂载时创建缺失默认值):
bashsenv init
在当前目录初始化仓库本地配置:
bashsenv init --local
仅本地初始化(不影响/etc/share/sops):
bashsenv init --local-only
状态/信息:
bashsenv info
加密/解密(默认):
bashsenv enc # .env -> .env.enc senv dec # .env.enc -> .env senv edit # 使用sops编辑器模式编辑.env.enc
显式输入/输出:
bashsenv enc --in=./.env --out=./.env.enc senv dec --in=./.env.enc --out=./.env
使用"共享加密环境仓库"作为输入源:
bash# 从/etc/share/vhosts/sops/demo.env.enc读取 # 写入到./demo.env(除非设置--out) senv dec --in=demo.env.enc # 共享仓库内的嵌套路径 senv dec --in=projectA/prod/.env.enc --out=./.env
推拉快捷操作(共享加密仓库):
bash# 拉取/etc/share/vhosts/sops/<project>/.env.enc -> ./.env senv pull --project projectA # 推送./.env -> /etc/share/vhosts/sops/<project>/.env.enc senv push --project projectA
notifierdnotifierd监听TCP(默认9901)并使用固定前缀(默认__HOST_NOTIFY__)向标准输出发送单行事件。
notify(工具容器内)bashnotify "构建完成" "所有服务均健康 ✅"
docknotify主机端配套工具,使用稳定的单行TCP协议向工具的notifierd服务发送通知。
协议(制表符分隔): token timeout urgency source title body
bashsudo curl -fsSL \ "https://raw.githubusercontent.com/infocyph/Scriptomatic/refs/heads/main/bash/docknotify.sh" \ -o /usr/local/bin/docknotify \ && sudo chmod +x /usr/local/bin/docknotify
bashdocknotify "构建完成" "所有服务均健康 ✅"
bashdocker logs -f docker-tools 2>/dev/null | awk -v p="__HOST_NOTIFY__" ' index($0, p) == 1 { line = $0 sub("^" p "[ \t]*", "", line) n = split(line, a, "\t") if (n >= 6) { urgency = a[3] source = a[4] title = a[5] body = a[6] for (i = 7; i <=
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务