通过游牧在 docker 中安装卷
Mounting volumes in docker via nomad
我正在尝试通过游牧者运行 docker 容器。此作业规范旨在 运行 具有 java docker 图像的 docker 容器。来自本地主机路径的卷应该安装到 docker 容器上。此卷将包含一些 java 个文件。容器应按照命令的指定编译 java 文件。
期望:应该完成 java 程序的编译,并且应该在容器和我的本地主机路径中创建一个 class 文件。
工作规范文件:
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
希望我帮到了你
我正在尝试通过游牧者运行 docker 容器。此作业规范旨在 运行 具有 java docker 图像的 docker 容器。来自本地主机路径的卷应该安装到 docker 容器上。此卷将包含一些 java 个文件。容器应按照命令的指定编译 java 文件。
期望:应该完成 java 程序的编译,并且应该在容器和我的本地主机路径中创建一个 class 文件。
工作规范文件:
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
希望我帮到了你