本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
Nomad podman Driver是HashiCorp Nomad的容器驱动插件,允许用户在Nomad集群中使用podman运行容器。该插件由@towe75和Pascom贡献,提供了容器生命周期管理、资源监控、网络配置等核心能力,适用于需要在Nomad中集成podman容器运行时的场景,尤其支持rootless容器及cgroup V2。
该项目包含go.mod定义,可克隆到任意目录,无需设置GOPATH。需使用Go 1.13或更高版本。
$ git clone ***: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一起使用,标签仍会应用于容器中的标准绑定。plugin "nomad-driver-podman" { config { volumes { enabled = true selinuxlabel = "z" } } }
container - 默认true。可禁用Nomad在任务退出时删除容器。plugin "nomad-driver-podman" { config { gc { container = false } } }
默认true。允许驱动在Nomad客户端重启后启动并重用之前停止的容器。适用于单节点系统重启场景,可避免容器重建。
plugin "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"。
plugin "nomad-driver-podman" { config { socket_path = "unix://run/podman/io.podman" } }
指定要运行的容器镜像。
config { image = "docker://redis" }
容器的入口点,默认为镜像中定义的入口点。
config { entrypoint = "/entrypoint.sh" }
启动容器时执行的命令。
config { command = "some-command" }
命令参数列表。若未指定command,参数将直接传递给容器。
config { args = [ "arg1", "arg2", ] }
容器的工作目录,默认为镜像中定义的默认目录。
config { working_dir = "/data" }
主机路径与容器路径绑定的字符串列表,格式为host_path:container_path。
config { volumes = [ "/some/host/data:/container/data" ] }
tmpfs挂载点的容器路径列表,详见podman run --tmpfs选项。
config { tmpfs = [ "/var" ] }
分配给容器的主机名。使用count启动多个任务实例时,所有容器将共享此主机名。
配置方法详见Docker驱动端口配置。
在容器内运行init进程,用于转发信号和回收子进程。
config { init = true }
容器init二进制文件的路径。
config { init = true init_path = "/usr/libexec/podman/catatonit" }
在容器内以指定用户/UID运行命令,详见任务用户配置。
user = "nobody" config { }
内存软限制(单位:b/字节、k/千字节、m/兆字节、g/千兆字节)。当系统内存紧张时,容器将被限制在预留值内,需小于memory硬限制。
config { memory_reservation = "100m" }
内存+交换空间的总限制,必须大于内存资源值。单位同上,设置为-1表示无限制交换空间。
config { memory_swap = "180m" }
调整容器内存交换行为,取值范围0-100(整数)。
config { memory_swappiness = 60 }
设置容器网络模式:
bridge:(root用户默认)使用默认桥接网络none:禁用网络container:id:重用其他容器的网络栈host:使用主机网络栈(不安全,容器可访问主机系统服务)slirp4netns:(rootless默认)使用slirp4netns创建用户网络栈(root容器暂不支持)config { network_mode = "bridge" }
job "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" {} } } } } }
运行任务:
nomad 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"
验证容器运行:
podman 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
systemctl --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/***/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
crun -V crun version 0.13.227-d38b commit: d38b8c28fc50a14978a27fa6afc69a55bfdd2c11 spec: 1.0.0 +SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +YAJL
example.nomadjob "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
podman 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
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429