如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Nomad podman Driver是HashiCorp Nomad的容器驱动插件,允许用户在Nomad集群中使用podman运行容器。该插件由https://github.com/towe75%E5%92%8CPascom%E8%B4%A1%E7%8C%AE%EF%BC%8C%E6%8F%90%E4%BE%9B%E4%BA%86%E5%AE%B9%E5%99%A8%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E7%AE%A1%E7%90%86%E3%80%81%E8%B5%84%E6%BA%90%E7%9B%91%E6%8E%A7%E3%80%81%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE%E7%AD%89%E6%A0%B8%E5%BF%83%E8%83%BD%E5%8A%9B%EF%BC%8C%E9%80%82%E7%94%A8%E4%BA%8E%E9%9C%80%E8%A6%81%E5%9C%A8Nomad%E4%B8%AD%E9%9B%86%E6%88%90podman%E5%AE%B9%E5%99%A8%E8%BF%90%E8%A1%8C%E6%97%B6%E7%9A%84%E5%9C%BA%E6%99%AF%EF%BC%8C%E5%B0%A4%E5%85%B6%E6%94%AF%E6%8C%81rootless%E5%AE%B9%E5%99%A8%E5%8F%8Acgroup V2。
该项目包含go.mod定义,可克隆到任意目录,无需设置GOPATH。需使用Go 1.13或更高版本。
sh$ git clone git@github.com:hashicorp/nomad-driver-podman cd nomad-driver-podman ./build.sh
podman的Linux主机需启用varlink的podman二进制文件和系统套接字激活单元,详见podman varlink文档。Nomad代理、驱动及podman位于同一主机,无需配置podman varlink的SSH相关功能。需确保Nomad能找到插件,配置方法见plugin_dir。
enabled - 默认true。允许任务将主机路径(卷)绑定到容器内。selinuxlabel - 允许管理员为分配和任务本地绑定挂载到容器的路径设置SELinux标签。若与volumes.enabled=false一起使用,标签仍会应用于容器中的标准绑定。hclplugin "nomad-driver-podman" { config { volumes { enabled = true selinuxlabel = "z" } } }
container - 默认true。可禁用Nomad在任务退出时删除容器。hclplugin "nomad-driver-podman" { config { gc { container = false } } }
默认true。允许驱动在Nomad客户端重启后启动并重用之前停止的容器。适用于单节点系统重启场景,可避免容器重建。
hclplugin "nomad-driver-podman" { config { recover_stopped = false } }
默认值:root用户或cgroup V1系统为"unix://run/podman/io.podman",rootless cgroup V2系统为"unix://run/user/<USER_ID>/podman/io.podman"。
hclplugin "nomad-driver-podman" { config { socket_path = "unix://run/podman/io.podman" } }
指定要运行的容器镜像。
hclconfig { image = "docker://redis" }
容器的入口点,默认为镜像中定义的入口点。
hclconfig { entrypoint = "/entrypoint.sh" }
启动容器时执行的命令。
hclconfig { command = "some-command" }
命令参数列表。若未指定command,参数将直接传递给容器。
hclconfig { args = [ "arg1", "arg2", ] }
容器的工作目录,默认为镜像中定义的默认目录。
hclconfig { working_dir = "/data" }
主机路径与容器路径绑定的字符串列表,格式为host_path:container_path。
hclconfig { volumes = [ "/some/host/data:/container/data" ] }
tmpfs挂载点的容器路径列表,详见podman run --tmpfs选项。
hclconfig { tmpfs = [ "/var" ] }
分配给容器的主机名。使用count启动多个任务实例时,所有容器将共享此主机名。
配置方法详见Docker驱动端口配置。
在容器内运行init进程,用于转发信号和回收子进程。
hclconfig { init = true }
容器init二进制文件的路径。
hclconfig { init = true init_path = "/usr/libexec/podman/catatonit" }
在容器内以指定用户/UID运行命令,详见任务用户配置。
hcluser = "nobody" config { }
内存软限制(单位:b/字节、k/千字节、m/兆字节、g/千兆字节)。当系统内存紧张时,容器将被限制在预留值内,需小于memory硬限制。
hclconfig { memory_reservation = "100m" }
内存+交换空间的总限制,必须大于内存资源值。单位同上,设置为-1表示无限制交换空间。
hclconfig { memory_swap = "180m" }
调整容器内存交换行为,取值范围0-100(整数)。
hclconfig { memory_swappiness = 60 }
设置容器网络模式:
bridge:(root用户默认)使用默认桥接网络none:禁用网络container:id:重用其他容器的网络栈host:使用主机网络栈(不安全,容器可访问主机系统服务)slirp4netns:(rootless默认)使用slirp4netns创建用户网络栈(root容器暂不支持)hclconfig { network_mode = "bridge" }
hcljob "redis" { datacenters = ["dc1"] type = "service" group "redis" { task "redis" { driver = "podman" config { image = "docker://redis" port_map { redis = 6379 } } resources { cpu = 500 memory = 256 network { mbits = 20 port "redis" {} } } } } }
运行任务:
shnomad run redis.nomad ==> Monitoring evaluation "9fc25b88" Evaluation triggered by job "redis" Allocation "60fdc69b" created: node "f6bccd6d", group "redis" Evaluation status changed: "pending" -> "complete" ==> Evaluation "9fc25b88" finished with status "complete"
验证容器运行:
shpodman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d2d700cbce6 docker.io/library/redis:latest docker-entrypoint... 16 seconds ago Up 16 seconds ago redis-60fdc69b-65cb-8ece-8554-df49321b3462
/etc/default/grub,添加内核参数GRUB_CMDLINE_LINUX_DEFAULT="quiet cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=1"
更新grub:sudo update-grub
shsystemctl --user status io.podman ● io.podman.service - Podman Remote API Service Loaded: loaded (/usr/lib/systemd/user/io.podman.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2020-07-01 16:01:41 EDT; 7s ago TriggeredBy: ● io.podman.socket Docs: man:podman-varlink(1) Main PID: 25091 (podman) Tasks: 29 (limit: 18808) Memory: 17.5M CPU: 184ms CGroup: /user.slice/user-1000.slice/user@1000.service/io.podman.service ├─25091 /usr/bin/podman varlink unix:/run/user/1000/podman/io.podman --timeout=60000 --cgroup-manager=systemd ├─25121 /usr/bin/podman varlink unix:/run/user/1000/podman/io.podman --timeout=60000 --cgroup-manager=systemd └─25125 /usr/bin/podman
shcrun -V crun version 0.13.227-d38b commit: d38b8c28fc50a14978a27fa6afc69a55bfdd2c11 spec: 1.0.0 +SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +YAJL
example.nomadhcljob "example" { datacenters = ["dc1"] type = "service" group "cache" { count = 1 restart { attempts = 2 interval = "30m" delay = "15s" mode = "fail" } task "redis" { driver = "podman" config { image = "redis" port_map { db = 6379 } } resources { cpu = 500 # 500 MHz memory = 256 # 256MB network { port "db" {} } } } } }
提交任务:nomad job run example.nomad
shpodman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2423ae3efa21 docker.io/library/redis:latest redis-server 7 seconds ago Up 6 seconds ago 127.0.0.1:21510->6379/tcp, 127.0.0.1:21510->6379/udp redis-b640480f-4b93-65fd-7bba-c15722886395
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务