gpt4 book ai didi

docker - 如何将本地文件共享到 docker 容器在 swarm 中使用 docker-compose

转载 作者:IT老高 更新时间:2023-10-28 21:39:11 28 4
gpt4 key购买 nike

这是我的 docker compose 文件

version: '2'
services:
demoui:
image: demoimage
ports:
- "80:8000"
volumes:
- ./democonfig/config.js:/usr/local/tomcat/webapps/demo-ui/config.js
- ./logs/demo-ui:/usr/local/tomcat/logs
restart: unless-stopped

当我在单节点时,这个 docker compose 文件可以工作。移至 docker swarm 后。它不工作。它抛出以下错误

ERROR: for demoui  Error response from daemon: rpc error: code = 2 desc = "oci runtime error: could not synchronise with container process: not a directory"
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "compose/cli/main.py", line 63, in main
AttributeError: 'ProjectError' object has no attribute 'msg'
docker-compose returned -1

所以问题是

  1. 如何分享文件到swarm集群?

  2. 或者需要将所有文件复制到镜像中并运行?

  3. 请与 swarm 分享一些 docker volume 的文档。

最佳答案

您遇到的错误是因为您的卷的源文件/目录在您启动的 swarm 节点上不存在。 Docker(和 docker-compose)无法将这些文件复制到 swarm 中的其他主机。

源文件/目录需要存在于您要与之共享配置文件的所有 swarm 节点上。您还在撰写文件中使用了上下文相关的路径,这在所有节点之间不会保持一致。这应该是一个绝对路径(即 /opt/config 而不是 ./config~/config)。

作为快速修复,您需要将配置文件复制到同一位置(即/opt 或其他目录)的每个节点,并修改您的 compose 文件以指向该一致位置,例如

  volumes:
- /opt/config/config.js:/usr/local/tomcat/webapps/demo-ui/config.js
- /opt/logs/demo-ui:/usr/local/tomcat/logs

长期而言,您可以手动同步这些文件,使用 lsyncd 之类的工具为了使它们在节点之间自动保持同步,将它们放在 NFS 卷上并将其挂载到每个节点上,或者使用类似 glusterfs 的东西.

请记住您的日志目录,您可能希望确保您的日志文件不会相互干扰,因此您可能希望将它们保持在本地,或者如果使用共享存储,则确保每个节点的日志文件名都是唯一的.

关于docker - 如何将本地文件共享到 docker 容器在 swarm 中使用 docker-compose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37576019/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com