
jwilder/dockerizedockerize是一个简化Docker容器中应用运行的工具,旨在解决容器化应用部署中的常见问题,如配置文件动态生成、日志集中管理以及服务依赖启动顺序协调,使应用在Docker环境中更易于配置和维护。
docker logs命令统一查看/var/log/nginx目录)jwilder/dockerize是基于Alpine Linux的基础镜像,已预装dockerize并添加至$PATH,可直接使用:
dockerfileFROM jwilder/dockerize ... ENTRYPOINT dockerize ...
在Ubuntu基础镜像中安装:
dockerfileRUN apt-get update && apt-get install -y wget ENV DOCKERIZE_VERSION v0.5.0 RUN wget [***] \ && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
在Alpine基础镜像中安装:
dockerfileRUN apk add --no-cache openssl ENV DOCKERIZE_VERSION v0.5.0 RUN wget [***] \ && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz
dockerize通过包装应用启动命令(使用ENTRYPOINT或CMD指令)工作。以下示例展示生成Nginx配置、日志重定向及服务依赖等待的完整用法:
dockerfileCMD dockerize -template /etc/nginx/nginx.tmpl:/etc/nginx/nginx.conf -stdout /var/log/nginx/access.log -stderr /var/log/nginx/error.log -wait tcp://web:8000 nginx
多模板支持:多次使用-template指定多个模板文件:
bash$ dockerize -template template1.tmpl:file1.cfg -template template2.tmpl:file3
模板输出到STDOUT:不指定目标路径时,模板内容输出至STDOUT:
bash$ dockerize -template template1.tmpl
目录模板处理:模板为目录时,递归处理目录内所有文件并输出至目标目录(目标目录省略时输出至STDOUT):
bash$ dockerize -template src_dir:dest_dir
禁止覆盖文件:使用-no-overwrite选项避免覆盖已存在的目标文件:
bash$ dockerize -no-overwrite -template template1.tmpl:file
多日志文件重定向:多次使用-stdout或-stderr指定多个日志文件:
bash$ dockerize -stdout info.log -stdout perf.log
日志轮询模式:当inotify机制不可用时,使用-poll选项轮询文件变化:
bash$ dockerize -stdout info.log -stdout perf.log -poll
使用-delims修改模板变量分隔符(默认{{和}}):
bash$ dockerize -delims "<%:%>"
为HTTP/HTTPS协议的等待检查添加自定义请求头:
bash$ dockerize -wait [***] -wait-http-header "Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
dockerize支持在启动主进程前等待其他服务就绪,支持协议包括file、tcp、tcp4、tcp6、http、https和unix,解决容器启动顺序导致的服务不可用问题。
bash$ dockerize -wait tcp://db:5432 -wait [***] -wait file:///tmp/generated-file
使用-timeout指定等待超时时间(默认10秒),超时未就绪则进程退出(状态码1):
bash$ dockerize -wait tcp://db:5432 -wait [***] -timeout 10s
模板基于Golang text/template语法,通过.Env访问环境变量:
{{ .Env.PATH }} # 输出环境变量PATH的值
default:为不存在的变量提供默认值
{{ default .Env.VERSION "0.1.2" }}
contains:检查字符串是否包含子串
{{ contains .Env.PATH "/usr/local/bin" }}
exists:检查文件路径是否存在
{{ exists "/etc/default/myapp" }}
split:按分隔符拆分字符串为数组(strings.Split别名)
{{ split .Env.PATH ":" }}
replace:替换字符串中的子串(strings.Replace别名)
{{ replace .Env.PATH ":" ";" -1 }}
parseUrl:解析URL为URL对象(url.Parse别名)
{{ parseUrl .Env.URL }}
atoi:字符串转整数
{{ if (gt (atoi .Env.NUM_THREADS) 1) }}
add:整数加法运算
{{ add (atoi .Env.SHARD_NUM) -1 }}
isTrue:字符串转布尔值(支持"true"、"1"、"yes"等)
{{ if isTrue .Env.ENABLED }}
lower/upper:字符串大小写转换
{{ lower .Env.NAME }} / {{ upper .Env.NAME }}
jsonQuery:JSON文档查询
loop:循环生成
支持通过名称访问对象字段、索引访问数组元素([index]),嵌套元素用点(.)分隔。示例:
若环境变量SERVICES值为:
json{ "services": [ { "name": "service1", "port": 8000 }, { "name": "service2", "port": 9000 } ] }
则jsonQuery .Env.SERVICES "services.[1].port"返回9000。
生成循环序列,支持1-3个参数:
loop n:生成0到n-1的序列loop start end:生成start到end-1的序列loop start end step:生成start到end-1、步长为step的序列示例:
# 循环0-9 {{ range loop 10 }} i = {{ . }} {{ end }} # 循环5-9 {{ range $i := loop 5 10 }} i = {{ $i }} {{ end }} # 循环5、7、9(步长2) {{ range $i := loop 5 10 2 }} i = {{ $i }} {{ end }}
MIT




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