docker - 通过 nomad 在 docker 中安装卷
问题描述
我正在尝试通过 nomad 运行 docker 容器。该作业规范旨在运行带有 java docker 映像的 docker 容器。来自 localhost 路径的卷应该安装到 docker 容器上。该卷将包含一些 java 文件。容器应按照命令指定的方式编译 java 文件。
期望:应该完成java程序的编译,并且应该在容器和我的本地主机路径中创建一个类文件。
工作规范文件:
job "java" {
datacenters = ["dc1"]
type = "service"
update {
max_parallel = 1
healthy_deadline = "3m"
progress_deadline = "10m"
auto_revert = false
canary = 0
}
migrate {
max_parallel = 1
health_check = "checks"
min_healthy_time = "10s"
healthy_deadline = "5m"
}
group "compile" {
count = 1
service {
name = "java-compile"
tags = ["java", "compile"]
}
restart {
attempts = 2
interval = "30m"
delay = "15s"
mode = "fail"
}
ephemeral_disk {
size = 300
}
task "java" {
driver = "docker"
config {
image = "adoptopenjdk/openjdk11"
mount {
type = "bind"
target = "/java"
source = "/home/ninan/nomad/java"
readonly = false
bind_options {
propagation = "rshared"
}
}
work_dir = "/java"
command = "javac Hello.java"
}
resources {
cpu = 500 # 500 MHz
memory = 1024 # 256MB
}
}
}
}
目前它没有说volumes are not enabled; cannot mount host path: "/home/ninan/nomad/java"
附上日志的相关部分:
2021-08-18T19:09:54.818+0530 [INFO] client.alloc_runner.task_runner.task_hook.logmon.nomad: opening fifo: alloc_id=f2774019-4135-28f8-9a91-24f6a7c0dbf8 task=java @module=logmon path=/tmp/NomadClient304008624/f2774019-4135-28f8-9a91-24f6a7c0dbf8/alloc/logs/.java.stdout.fifo timestamp=2021-08-18T19:09:54.818+0530
2021-08-18T19:09:54.819+0530 [INFO] client.alloc_runner.task_runner.task_hook.logmon.nomad: opening fifo: alloc_id=f2774019-4135-28f8-9a91-24f6a7c0dbf8 task=java @module=logmon path=/tmp/NomadClient304008624/f2774019-4135-28f8-9a91-24f6a7c0dbf8/alloc/logs/.java.stderr.fifo timestamp=2021-08-18T19:09:54.819+0530
2021-08-18T19:09:55.310+0530 [WARN] client.alloc_runner.runner_hook.alloc_health_watcher: error looking up Consul registrations for allocation: alloc_id=f2774019-4135-28f8-9a91-24f6a7c0dbf8 error="failed to retrieve services from consul: Get "http://127.0.0.1:8500/v1/agent/services": dial tcp 127.0.0.1:8500: connect: connection refused" alloc_id=f2774019-4135-28f8-9a91-24f6a7c0dbf8
2021-08-18T19:10:08.094+0530 [ERROR] client.driver_mgr.docker: failed to create container configuration: driver=docker image_name=adoptopenjdk/openjdk11 image_id=sha256:af4af705169ddd5b5c49b64634bc7a09ac000f90ba8e5e49dd9d7cb61c5d2bb8 error="volumes are not enabled; cannot mount host path: "/home/ninan/nomad/java" "/tmp/NomadClient304008624/f2774019-4135-28f8-9a91-24f6a7c0dbf8""
2021-08-18T19:10:08.094+0530 [ERROR] client.alloc_runner.task_runner: running driver failed: alloc_id=f2774019-4135-28f8-9a91-24f6a7c0dbf8 task=java error="Failed to create container configuration for image "adoptopenjdk/openjdk11" ("sha256:af4af705169ddd5b5c49b64634bc7a09ac000f90ba8e5e49dd9d7cb61c5d2bb8"): volumes are not enabled; cannot mount host path: "/home/ninan/nomad/java" "/tmp/NomadClient304008624/f2774019-4135-28f8-9a91-24f6a7c0dbf8""
2021-08-18T19:10:08.095+0530 [INFO] client.alloc_runner.task_runner: not restarting task: alloc_id=f2774019-4135-28f8-9a91-24f6a7c0dbf8 task=java reason="Error was unrecoverable"
2021-08-18T19:10:08.095+0530 [INFO] client.gc: marking allocation for GC: alloc_id=f2774019-4135-28f8-9a91-24f6a7c0dbf8
Nomad 服务器启动为 -
sudo nomad agent -dev -bind 0.0.0.0 -log-level INFO
我该怎么做才能启用卷安装?
解决方案
您应该首先在 nomad 启动之前创建卷路径,然后在您的client.hcl
文件中添加以下配置:
host_volume "database-data" {
path = "/srv/live/postgres-database/data/"
read_only = false
}
然后在您的工作规范中,在该group
节中定义音量:
volume "database-data" {
type = "host"
read_only = false
source = "database-data"
}
然后最后在task
使用定义的卷的节中添加以下内容:
volume_mount {
volume = "database-data"
destination = "/var/lib/postgresql/data" #<-- in the container
read_only = false
}
有关更多详细信息,您可以使用https://www.nomadproject.io/docs/job-specification/volume
我希望我有所帮助
推荐阅读
- aws-cdk - 带有 waitForTaskToken 的 Aws StepFunction 路径
- excel - 在 Excel 中基于组对数据进行排序
- django - Elastic Apm python代理连接问题
- ios - 在选择时关闭作为 UITextField 输入视图的 UIPickerView
- c# - .NET Core SDK - 多个文件夹来解析 SDK
- django - 为什么谷歌应用引擎柔性环境django出现502错误?
- cypress - Cypress-Xpath :: 使用 docker compose 文件运行时出错
- c# - C# 将动态属性添加到 PropertyInfo
- regex - 正则表达式 - 在另一个子字符串匹配之后搜索不包含两个子字符串中的任何一个的文本
- python - 我应该使用什么策略来定期从特定文件夹中提取信息