
multani/nomad本镜像提供了HashiCorp Nomad调度器的Docker化部署版本,旨在简化Nomad的快速部署与测试。主要用途包括:
镜像设计参考了HashiCorp官方Dockerized Consul镜像的实现模式,基于djenriquez/nomad项目的基础进行开发。
/etc/nomad目录,或通过NOMAD_LOCAL_CONFIG环境变量直接注入配置内容host网络模式运行,确保Nomad正常通信/var/run/docker.sock以支持Docker任务驱动/tmp目录,满足Nomad默认临时文件需求(尤其在-dev模式下)NOMAD_DISABLE_PERM_MGMT环境变量privileged权限以支持各类任务驱动host网络模式与挂载卷功能/var/run/docker.sock(Docker任务驱动必需)/tmp(临时文件存储)/host/path/to/nomad/data)通过Docker Compose可快速启动开发环境,示例配置如下:
yamlversion: '2.1' services: nomad: image: multani/nomad command: agent -dev # 开发模式运行 privileged: true # 开发模式需特权权限 network_mode: host # 使用主机网络 environment: # 直接注入Nomad配置内容 NOMAD_LOCAL_CONFIG: | data_dir = "/nomad/data/" volumes: - /var/run/docker.sock:/var/run/docker.sock:rw # 挂载Docker socket - /tmp:/tmp # 共享临时目录
启动命令:
bashdocker-compose up
bashdocker run -d \ --name nomad-server \ --net host \ # 主机网络模式 --user nomad \ # 非root用户运行 -e NOMAD_DISABLE_PERM_MGMT=true \ # 禁用权限管理 -e NOMAD_LOCAL_CONFIG=' # 服务器配置内容 server { enabled = true bootstrap_expect = 3 # 期望的服务器节点数(集群启动需满足) } datacenter = "${REGION}" # 数据中心名称(需替换为实际值) region = "${DATACENTER}" # 区域名称(需替换为实际值) data_dir = "/nomad/data/" # 数据目录(容器内路径) bind_addr = "0.0.0.0" # 绑定所有网络接口 advertise { # 服务发现地址配置 http = "{{ GetPrivateIP }}:4646" # HTTP API端口 rpc = "{{ GetPrivateIP }}:4647" # RPC端口 serf = "{{ GetPrivateIP }}:4648" # Serf通信端口 } ' \ -v "nomad:/nomad/data:rw" # 数据卷挂载(持久化存储) multani/nomad agent # 启动Nomad代理
privileged权限以支持各类任务驱动bashdocker run -d \ --name nomad-client \ --net host \ # 主机网络模式 --privileged \ # 客户端需特权权限 -e NOMAD_LOCAL_CONFIG=' # 客户端配置内容 client { enabled = true # 启用客户端模式 } datacenter = "${REGION}" # 数据中心名称(需替换为实际值) region = "${DATACENTER}" # 区域名称(需替换为实际值) data_dir = "/nomad/data/" # 数据目录(容器内路径) bind_addr = "0.0.0.0" # 绑定所有网络接口 advertise { # 服务发现地址配置 http = "{{ GetPrivateIP }}:4646" # HTTP API端口 rpc = "{{ GetPrivateIP }}:4647" # RPC端口 serf = "{{ GetPrivateIP }}:4648" # Serf通信端口 } ' \ -v "/srv/nomad/data:/nomad/data:rw" \ # 数据目录挂载 -v "/var/run/docker.sock:/var/run/docker.sock" \ # Docker socket挂载 -v "/tmp:/tmp" \ # 临时目录挂载 multani/nomad agent # 启动Nomad代理
| 环境变量名 | 说明 | 取值示例 |
|---|---|---|
NOMAD_LOCAL_CONFIG | 直接注入Nomad配置内容,支持HCL/JSON格式 | data_dir = "/nomad/data/" |
NOMAD_DISABLE_PERM_MGMT | 非root用户运行时设置,禁用Nomad权限管理功能 | true |
NOMAD_DATA_DIR | 数据目录路径(需与挂载路径一致,用于模板文件路径映射) | /host/path/to/nomad/data |
| 配置项 | 说明 | 服务器模式 | 客户端模式 |
|---|---|---|---|
server.enabled | 是否启用服务器模式 | true | false |
client.enabled | 是否启用客户端模式 | false | true |
data_dir | 数据存储目录路径(需与容器挂载路径一致) | 必需 | 必需 |
bind_addr | 绑定地址,通常设为0.0.0.0以监听所有接口 | 必需 | 必需 |
advertise | 服务发现地址配置,包含HTTP/RPC/Serf端口 | 必需 | 必需 |
Nomad生成的模板文件路径依赖于data_dir配置,为确保宿主机Docker daemon能正确挂载这些路径,需满足以下条件:
路径一致性:容器内data_dir路径必须与宿主机挂载路径完全一致
示例:宿主机路径/host/nomad/data需挂载为容器内同路径,配置data_dir = "/host/nomad/data"
环境变量传递:通过NOMAD_DATA_DIR环境变量显式指定数据目录路径,确保配置与挂载同步:
bashexport NOMAD_DATA_DIR=/host/path/to/nomad/data docker run \ ... \ -v "$NOMAD_DATA_DIR:$NOMAD_DATA_DIR:rw" \ # 路径保持一致 -e "NOMAD_DATA_DIR=$NOMAD_DATA_DIR" \ # 传递环境变量 multani/nomad agent
chown -R 1000:1000 /host/path/to/nomad/data)# Nomad Docker镜像文档本镜像提供HashiCorp Nomad调度器的Docker化部署版本,主要用于测试环境及小型Nomad集群部署。镜像设计参考Hashicorp官方Dockerized Consul镜像模型,基于djenriquez/nomad项目开发。
镜像需运行在主机网络模式下,支持灵活配置与非root用户运行,适合快速搭建Nomad测试环境或轻量级部署场景。
/etc/nomad目录,或使用NOMAD_LOCAL_CONFIG环境变量直接注入配置内容/var/run/docker.sock以启用Docker任务驱动/tmp目录存储临时文件,需从宿主机挂载host网络模式确保Nomad组件间通信正常NOMAD_DISABLE_PERM_MGMT环境变量可禁用权限管理,支持非root用户运行privileged标志以支持Docker、网络等任务驱动host网络模式与挂载卷功能/var/run/docker.sock(Docker任务驱动必需)/tmp(临时文件存储)/srv/nomad/data)适用于开发测试环境,一键启动Nomad开发模式:
yamlversion: '2.1' services: nomad: image: multani/nomad command: agent -dev # 开发模式运行 privileged: true # 开发模式需特权权限 network_mode: host # 使用主机网络 environment: NOMAD_LOCAL_CONFIG: | # 内联配置 data_dir = "/nomad/data/" volumes: - /var/run/docker.sock:/var/run/docker.sock:rw # Docker socket挂载 - /tmp:/tmp # 临时目录共享
启动命令:
bashdocker-compose up
NOMAD_DISABLE_PERM_MGMT=true)bashdocker run -d \ --name nomad-server \ --net host \ --user nomad \ # 非root用户运行 -e NOMAD_DISABLE_PERM_MGMT=true \ -e NOMAD_LOCAL_CONFIG=' server { enabled = true bootstrap_expect = 3 # 集群引导节点数 } datacenter = "dc1" region = "global" data_dir = "/nomad/data/" bind_addr = "0.0.0.0" advertise { http = "{{ GetPrivateIP }}:4646" rpc = "{{ GetPrivateIP }}:4647" serf = "{{ GetPrivateIP }}:4648" } ' \ -v "nomad-data:/nomad/data:rw" # 数据卷持久化 multani/nomad agent
privileged权限支持任务驱动bashdocker run -d \ --name nomad-client \ --net host \ --privileged \ # 客户端需特权权限 -e NOMAD_LOCAL_CONFIG=' client { enabled = true } datacenter = "dc1" region = "global" data_dir = "/nomad/data/" bind_addr = "0.0.0.0" advertise { http = "{{ GetPrivateIP }}:4646" rpc = "{{ GetPrivateIP }}:4647" serf = "{{ GetPrivateIP }}:4648" } ' \ -v "/srv/nomad/data:/nomad/data:rw" \ # 数据目录 -v "/var/run/docker.sock:/var/run/docker.sock" \ # Docker socket -v "/tmp:/tmp" \ # 临时目录 multani/nomad agent
| 环境变量名 | 说明 | 适用场景 |
|---|---|---|
NOMAD_LOCAL_CONFIG | 内联配置内容,支持HCL/JSON格式,优先级高于挂载文件 | 所有模式 |
NOMAD_DISABLE_PERM_MGMT | 禁用Nomad权限管理,非root用户运行时必需 | 服务器模式(非root运行) |
NOMAD_DATA_DIR | 数据目录路径(需与挂载路径一致,用于模板文件路径映射) | 所有模式 |
| 配置项 | 说明 | 服务器模式 | 客户端模式 |
|---|---|---|---|
server.enabled | 启用服务器模式 | true | false |
client.enabled | 启用客户端模式 | false | true |
data_dir | 数据存储目录(必须与容器挂载路径一致) | 必需 | 必需 |
bind_addr | 绑定地址,通常设为0.0.0.0 | 必需 | 必需 |
advertise | 服务发现地址配置,包含HTTP(4646)、RPC(4647)、Serf(4648)端口 | 必需 | 必需 |
bootstrap_expect | 集群引导期望节点数(服务器模式) | 集群初始化 | 不适用 |
Nomad模板文件路径依赖data_dir配置,为确保宿主机Docker daemon能正确挂载这些路径,需满足:
路径一致性:容器内data_dir路径必须与宿主机挂载路径完全相同
示例:宿主机路径/host/nomad/data需挂载为容器内同路径,配置data_dir = "/host/nomad/data"
环境变量传递:通过NOMAD_DATA_DIR显式指定路径,确保配置与挂载同步:
bashexport NOMAD_DATA_DIR=/host/nomad/data docker run \ ... \ -v "$NOMAD_DATA_DIR:$NOMAD_DATA_DIR:rw" \ -e "NOMAD_DATA_DIR=$NOMAD_DATA_DIR" \ multani/nomad agent
chown -R 1000:1000 /host/nomad/data)

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务