
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
用于简化Docker容器中应用运行的工具。
关于此分支: 本分支旨在成为社区维护的替代版本,以替代https://github.com/powerman/dockerize/issues/19%E7%9A%84https://github.com/jwilder/dockerize%E3%80%82%E6%89%80%E6%9C%89%E4%B8%BA%E9%A1%B9%E7%9B%AE%E5%81%9A%E5%87%BA%E8%B4%A1%E7%8C%AE%E7%9A%84%E4%BA%BA%E9%83%BD%E5%8F%AF%E4%BB%A5%E6%88%90%E4%B8%BA%E5%8D%8F%E4%BD%9C%E8%80%85 - 只需在PR合并后在PR评论中提出请求即可。
dockerize是一个用于简化Docker容器中应用运行的工具。它允许你:
dockerize的典型用例是当你的应用有一个或多个配置文件,而你希望通过环境变量控制其中一些值时。
例如,一个使用Sqlalchemy的Python应用可能无法直接使用环境变量。它可能要求数据库URL从Python设置文件中名为SQLALCHEMY_DATABASE_URI的变量读取。dockerize允许你设置诸如DATABASE_URL之类的环境变量,并在容器启动时更新该Python文件。此外,它还可以延迟Python应用的启动,直到数据库容器运行并监听TCP端口。
另一个用例是当应用将日志记录到文件系统上的特定文件而不是stdout或stderr时。这使得使用docker logs命令排查容器问题变得困难。例如,nginx默认会记录到/var/log/nginx/access.log和/var/log/nginx/error.log。虽然有时可以解决此问题,但为每个应用找到解决方案很繁琐。dockerize允许你指定哪些日志文件应该被跟踪以及发送到哪里。
参见 A Simple Way To Dockerize Applications
dockerize是一个静态编译的二进制文件,因此它应该适用于任何基础镜像。
要使用大多数基础镜像下载它,你需要先安装curl:
sh### alpine: apk add curl ### debian, ubuntu: apt update && apt install -y curl
然后可以安装最新版本:
shcurl -sfL $(curl -s https://api.github.com/repos/powerman/dockerize/releases/latest | grep -i /dockerize-$(uname -s)-$(uname -m)\" | cut -d\" -f4) | install /dev/stdin /usr/local/bin/dockerize
或者特定版本:
shcurl -sfL https://github.com/powerman/dockerize/releases/download/v0.11.5/dockerize-`uname -s`-`uname -m` | install /dev/stdin /usr/local/bin/dockerize
如果curl不可用(例如busybox基础镜像),则可以使用wget:
sh### busybox: 最新版本 wget -O - $(wget -O - https://api.github.com/repos/powerman/dockerize/releases/latest | grep -i /dockerize-$(uname -s)-$(uname -m)\" | cut -d\" -f4) | install /dev/stdin /usr/local/bin/dockerize ### busybox: 特定版本 wget -O - https://github.com/powerman/dockerize/releases/download/v0.11.5/dockerize-`uname -s`-`uname -m` | install /dev/stdin /usr/local/bin/dockerize
用于验证签名二进制文件的PGP公钥:[***]
shcurl -sfL https://powerman.name/about/Powerman.asc | gpg --import curl -sfL https://github.com/powerman/dockerize/releases/download/v0.11.5/dockerize-`uname -s`-`uname -m`.asc >dockerize.asc gpg --verify dockerize.asc /usr/local/bin/dockerize
powerman/dockerize镜像是基于alpine linux的基础镜像。dockerize已安装在$PATH中,可以直接使用。
dockerfileFROM powerman/dockerize ... ENTRYPOINT dockerize ...
dockerize通过使用ENTRYPOINT或CMD指令包装对应用的调用来工作。
以下示例将从位于/etc/nginx/nginx.tmpl的模板生成/etc/nginx/nginx.conf,并在运行nginx后,将/var/log/nginx/access.log发送到STDOUT,将/var/log/nginx/error.log发送到STDERR,前提是等待web主机在tcp 8000上响应:
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来指定多个模板:
sh$ dockerize -template template1.tmpl:file1.cfg -template template2.tmpl:file3
通过不指定目标,可以将模板生成到STDOUT:
sh$ dockerize -template template1.tmpl
模板也可以是一个目录。在这种情况下,该目录中的所有文件都将作为模板递归处理,并以相同的名称存储在目标目录中。如果省略目标目录,则输出将发送到STDOUT。源目录中的文件按排序顺序处理(由ioutil.ReadDir返回)。
sh$ dockerize -template src_dir:dest_dir
如果目标文件已存在,dockerize将覆盖它。-no-overwrite标志可覆盖此行为。
sh$ dockerize -no-overwrite -template template1.tmpl:file
可以通过多次传递选项来将多个文件输出到STDOUT和STDERR:
sh$ dockerize -stdout info.log -stdout perf.log
如果你的文件使用{{和}}作为语法的一部分,可以使用-delims更改模板转义字符:
sh$ dockerize -delims "<%:%>" -template template1.tmpl
你可以使用-template-strict要求模板中提到的所有环境变量都存在:
sh$ dockerize -template-strict -template template1.tmpl
可以为http/https协议指定HTTP头。如果头被指定为文件路径,则该文件必须包含单个Header: value字符串。
sh$ dockerize -wait http://web:80 -wait-http-header "Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
可以指定所需的HTTP状态码,否则将接受任何2xx状态码。
sh$ dockerize -wait http://web:80 -wait-http-status-code 302 -wait-http-status-code 200
可以忽略HTTP重定向:
sh$ dockerize -wait http://web:80 -wait-http-skip-redirect
在使用Docker Compose等工具时,依赖其他链接容器中的服务是很常见的,但是仅依赖链接通常是不够的——虽然容器本身可能已经_启动_,但其内部的_服务_可能尚未准备好——这导致需要使用shell脚本技巧来解决竞争条件。
Dockerize使你能够在启动应用之前等待指定协议(file、tcp、tcp4、tcp6、http、https、amqp、amqps和unix)上的服务可用:
sh$ dockerize -wait tcp://db:5432 -wait http://web:80 -wait file:///tmp/generated-file
你可以选择使用-timeout #参数指定等待服务可用的最长时间(默认:10秒)。如果达到超时且服务仍不可用,进程将以状态码123退出。
sh$ dockerize -wait tcp://db:5432 -wait http://web:80 -timeout 10s
有关更深入的讨论,以及为什么Docker生态系统本身不支持且不会支持此功能,请参见https://github.com/docker/compose/issues/374#issuecomment-***%E3%80%82
sh$ dockerize -cacert /path/to/ca.pem -wait https://web:80
sh$ dockerize -skip-tls-verify -wait https://web:80
你可以从INI文件加载缺失环境变量的默认值。多行标志允许解析多行INI条目。带有头的文件必须包含单个Header: value字符串。
sh$ dockerize -env /path/to/file.ini -env-section SectionName -multiline … $ dockerize -env http://localhost:80/file.ini \ -env-header "Header: value" -env-header /path/to/file/with/header …
模板使用Golang text/template。你可以在模板中使用.Env访问环境变量。
{{ .Env.PATH }} is my path
在模板中,你可以使用http://masterminds.github.io/sprig/%E4%BB%A5%E5%8F%8A%E4%B8%80%E4%BA%9B%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0%EF%BC%9A
exists $path - 确定文件路径是否存在。{{ if exists "/etc/default/myapp" }}parseUrl $url - 将URL解析为其协议、方案、主机等部分。是url.Parse的别名isTrue $value - 将字符串$value解析为布尔值。{{ if isTrue .Env.ENABLED }}jsonQuery $json $query - 返回对json文档的选择查询结果。readFile $fileName - 返回指定文件的内容,如果文件不存在则返回空字符串。警告!与https://github.com/jwilder/dockerize%E4%B8%8D%E5%85%BC%E5%AE%B9%EF%BC%81 由于添加了Sprig函数,这些模板函数已更改,因此在升级前请仔细检查你的模板:
default - 参数顺序已更改。contains - 现在适用于字符串而不是映射,请改用hasKey。split - 现在拆分为映射而不是列表,请改用splitList。replace - 参数顺序和数量已更改。loop - 已移除,请改用untilStep。对象和字段通过名称访问。数组元素通过方括号中的索引访问(例如[1])。嵌套元素通过点(.)分隔。
示例:
如果.Env.SERVICES中包含以下JSON:
json{ "services": [ { "name": "service1", "port": 8000, },{ "name": "service2", "port": 9000, } ] }
则模板表达式jsonQuery .Env.SERVICES "services.[1].port"返回9000。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。





来自真实用户的反馈,见证轩辕镜像的优质服务