
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本项目创建了https://hub.docker.com/r/mitigram/portainer-ce Docker镜像,基于https://portainer.io/,可通过环境变量(均以PORTAINER_开头)、JSON文件和命令行选项组合配置。此外,该项目提供团队和用户初始化功能,便于在使用LDAP自动创建用户并关联现有团队时,实现LDAP组与Portainer团队的匹配。其目标是自动跟进Portainer的https://github.com/portainer/portainer/releases节奏,通过镜像https://hub.docker.com/r/mitigram/portainer-ce/tags体现。
假设镜像为mitigram/portainer-ce,以下命令将:
devs和admins的两个团队shelldocker run -it --rm \ -e PORTAINER_ENABLETELEMETRY=false \ docker.xuanyuan.run/mitigram/portainer-ce \ --port 8080 \ --teams devs,admins
重要提示:本项目使用git https://git-scm.com/book/en/v2/Git-Tools-Submodules!克隆时需添加--recurse命令行选项,若未添加需后续补充。
本项目在常规https://portainer.io/ https://hub.docker.com/r/portainer/portainer-ce基础上叠加了初始化阶段,以简化配置并便于与复杂项目集成。该实现可自动配置Portainer的所有设置,还能创建用户和/或团队。与初始化阶段及底层Portainer交互有三种方式:
PORTAINER_开头)修改Portainer的初始化行为和配置。为增强安全性,敏感信息可通过以_FILE结尾的变量从Docker或Kubernetes密钥中读取。本项目遵循密钥安全最佳实践,但在debug模式下,密码可能会泄露到日志中,这是为了便于排查配置错误。用户创建功能支持生成密码,这些密码仅作临时使用,应尽快修改。
本实现的脚本行为可通过以PORTAINER_开头的环境变量控制。
影响通用行为的变量
通常,这些变量名称中PORTAINER_后的后缀与对应的命令行选项名称(大写形式)一致,具体如下:
Portainer启动时若管理员用户不存在,可自动创建。为此,可指定以下两个变量之一。当两者及对应命令行选项均为空(默认情况)时,入口脚本portainer.sh将生成随机密码并在notice级别日志中打印。
PORTAINER_ADMIN_PASSWORD:管理员用户的明文密码。出于安全考虑,应避免使用此变量或对应的--password选项。PORTAINER_ADMIN_PASSWORD_FILE:包含管理员密码的文件路径。由于文件系统可保护该文件,这是更安全的密码指定方式,符合Docker或Kubernetes将密钥传入容器的机制。部分变量会传递给settings.sh,后者通过API初始化Portainer实例:
PORTAINER_SETTINGS:指向包含API的/settings端点可识别的所有已知设置的JSON配置文件(见下文)。默认值为portainer.sh所在目录下的settings.json文件。PORTAINER_TEAMS:用于在Portainer实例中创建多个团队,默认不创建。该变量有两种格式:
@开头,剩余部分为包含团队名称的文件路径。文件中空白行和以#开头的注释行将被忽略,其他行应为要创建的团队名称。示例见examples/teams.lst。PORTAINER_USERS:包含用户规范的文件路径,示例见examples/users.db,默认不创建用户。文件中空白行和以#开头的注释行将被忽略,其他行包含以冒号:分隔的字段,顺序如下:
x,将生成随机密码并在info级别日志中显示。1为管理员,2为普通用户,为空时默认2。团队名称/角色,角色为整数:1为领导者,2为成员。若省略/角色,用户默认为团队成员(角色2)。两个影响与portainer主二进制交互的变量:
PORTAINER_PORT_NUMBER:实例监听UI和API调用的端口,默认9000。此选项替代常规portainer二进制的--bind选项。为避免在k8s中命名冲突,特意不命名为PORTAINER_PORT。PORTAINER_BIN:portainer二进制的路径(或在PATH中查找的名称),默认portainer。Portainer JSON设置相关变量
另一组以PORTAINER_开头的变量对应JSON settings对象中的各个键。设置对象是分层结构,可能包含数组,环境变量有对应的表示方式。要匹配(替换)JSON数组中的单个设置,变量名称应由层级中的键名(转为大写,.替换为_)构成。若JSON键为数组,可在名称中插入索引(如0、1等,最大索引可通过PORTAINER_MAX环境变量修改,默认为10)。若变量名以_FILE结尾,其值应为包含要放入JSON结构内容的文件路径,可用于传递密钥。
以下基于示例设置结构说明命名规则:
json{ "AllowBindMountsForRegularUsers": false, "AllowContainerCapabilitiesForRegularUsers": true, "AllowDeviceMappingForRegularUsers": true, "AllowHostNamespaceForRegularUsers": true, "AllowPrivilegedModeForRegularUsers": false, "AllowStackManagementForRegularUsers": true, "AllowVolumeBrowserForRegularUsers": true, "AuthenticationMethod": 1, "BlackListedLabels": [ { "name": "", "value": "" } ], "EdgeAgentCheckinInterval": 5, "EnableEdgeComputeFeatures": true, "EnableHostManagementFeatures": true, "EnableTelemetry": false, "LDAPSettings": { "AnonymousMode": true, "AutoCreateUsers": true, "GroupSearchSettings": [ { "GroupAttribute": "", "GroupBaseDN": "", "GroupFilter": "" } ], "Password": "", "ReaderDN": "", "SearchSettings": [ { "BaseDN": "", "Filter": "", "UserNameAttribute": "" } ], "StartTLS": true, "TLSConfig": { "TLS": true, "TLSCACert": "", "TLSCert": "", "TLSKey": "", "TLSSkipVerify": false }, "URL": "" }, "LogoURL": "", "OAuthSettings": { "AccessTokenURI": "", "AuthorizationURI": "", "ClientID": "", "ClientSecret": "", "DefaultTeamID": 0, "OAuthAutoCreateUsers": true, "RedirectURI": "", "ResourceURI": "", "Scopes": "", "UserIdentifier": "" }, "SnapshotInterval": "5m", "TemplatesURL": "https://raw.githubusercontent.com/portainer/templates/master/templates.json", "UserSessionTimeout": "5m", "displayDonationHeader": true, "displayExternalContributors": true }
要禁用主机管理功能,可设置PORTAINER_ENABLEHOSTMANAGEMENT_FEATURES=false;要指定黑名单标签名称,可设置PORTAINER_BLACKLISTEDLABELS0_NAME(注意BLACKLISTEDLABELS后紧跟0);要从/var/run/secrets/LDAP_password文件读取LDAP只读用户密码,可设置PORTAINER_LDAPSETTINGS_PASSWORD_FILE=/var/run/secrets/LDAP_password。
本实现的主脚本portainer.sh支持多个命令行选项。部分选项替代直接传递给portainer的选项,多数影响初始化阶段行为。若要向portainer传递特定选项,可在命令行中使用--标记,其后所有内容将原样传递给portainer。运行portainer.sh --help(或-h)可获取帮助。
命令行选项(若存在且相关)优先级高于环境变量。
仓库根目录下的所有其他脚本均可通过--help(或-h)获取帮助。
从仓库主目录执行以下命令构建镜像:
shelldocker build -t mitigram/portainer-ce .
镜像支持两个构建参数以选择特定版本的依赖:
PORTAINER_VERSION:Portainer版本,应与官方https://hub.docker.com/r/portainer/portainer-ce的https://hub.docker.com/r/portainer/portainer-ce/tags匹配,默认latest。GRON_VERSION:https://github.com/tomnomnom/gron版本,默认0.6.1,通常无需修改。由于本镜像基于官方Portainer https://hub.docker.com/r/portainer/portainer-ce并仅提供简化初始化功能,建议遵循Portainer的版本控制。例如,构建2.1.1版本:
shelldocker build -t mitigram/portainer-ce:2.1.1 --build-arg PORTAINER_VERSION=2.1.1 .
本项目包含脚本,用于从命令行调用Portainer REST API。除描述Portainer实例连接的选项外,该脚本至少需2个参数:第一个为HTTP方法(如GET、POST、PUT),第二个为API路径(不含前导/api,如获取当前设置的/settings)。其余参数将作为选项传递给curl(如通过--data传递POST数据)。
运行api.sh --help可获取在线帮助。
若管理员密码为s3cr3t,以下示例打印本地9000端口Portainer实例的当前设置:
shell./api.sh --password s3cr3t GET /settings
以下示例创建名为bob的普通用户:
shell./api.sh --password s3cr3t \ POST /users --data '{"username": "bob", "password": "cg9Wgky3", "role": 2}'
启动和初始化流程如下:
portainer.sh,识别选项和/或环境变量,定位要使用的settings.json文件版本,根据键名和层级查找匹配的环境变量,将新的设置JSON结构保存到临时位置。portainer.sh在后台启动settings.sh,传递必要参数(包括临时设置JSON文件路径)。portainer.sh执行Portainer,选择与Portainer相关的选项,以及portainer.sh启动时--后的所有命令行选项。portainer.sh指定的端口提供UI和API服务。settings.sh等待Portainer API可用,通过Portainer API端点执行:
portainer.sh准备的临时JSON设置。settings.sh清理portainer.sh创建的临时文件,配置结束。本项目使用多阶段构建:
PORTAINER_VERSION控制Portainer版本,默认latest。GRON_VERSION控制gron版本,默认0.6.1(编写时的最新版本)。最终阶段重建与原始https://hub.docker.com/r/portainer/portainer-ce镜像相似的环境:所有必要二进制文件置于文件系统根目录,工作目录设为根目录。这是因为Portainer需通过资产路径查找UI的HTML、js、CSS文件及kubectl、docker等二进制依赖。
本镜像配置为在以下情况自动重建:
镜像构建通过GitHub actions实现,这些action会为兼容性转发hooks,可用于DockerHub基础设施构建,如https://docs.docker.com/docker-hub/builds/advanced/自动构建手册所述。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 mitigram/portainer-ce 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: