这是我的Docker compose / stack文件。当我在单个节点上部署时,一切正常,但是当我在多个节点上部署时,出现以下错误:
类型绑定绑定源路径的无效安装配置不存在
version: '3'
services:
shinyproxy:
build: /etc/shinyproxy
deploy:
replicas: 3
user: root:root
hostname: shinyproxy
image: shinyproxy-example
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 5000:5000
networks:
- proxynetwork
mysql:
image: mysql
deploy:
replicas: 3
volumes:
- /mysqldata:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: keycloak
MYSQL_USER: keycloak
MYSQL_PASSWORD: password
networks:
- proxynetwork
keycloak:
deploy:
replicas: 3
image: jboss/keycloak
volumes:
- /etc/letsencrypt/live/ds-gym.de/fullchain.pem:/etc/x509/https/tls.crt
- /etc/letsencrypt/live/ds-gym.de/privkey.pem:/etc/x509/https/tls.key
#- /theme/govuk-social-providers/:/opt/jboss/keycloak/themes/govuk-social-providers/
environment:
- PROXY_ADDRESS_FORWARDING=true
- KEYCLOAK_USER=myadmin
- KEYCLOAK_PASSWORD=mypassword
ports:
- 8443:8443
networks:
- proxynetwork
networks:
proxynetwork:
external: true
我知道在其他所有节点上也都需要卷路径,但是我认为这是一个非常糟糕的做法,我的其他2个节点无论如何都是工作者。我该如何解决这个问题?希望有一种解决方案可以让我保留卷,因为我为docker-compose build
使用了相同的文件来构建映像。
有人可以帮我吗?
谢谢:-)
答案 0 :(得分:2)
如果可能,您可以使用placement constraints将此服务限制为具有所需主机路径的节点。但是我猜测在这种用例中这不是一个选择。 主机安装的卷实际上不应在群集部署中使用,因为它会导致节点之间的文件系统中出现冗余数据。 (所有文件都必须存在于所有节点上)。
一种解决方案是实施NFS volumes:
volumes:
example:
driver_opts:
type: "nfs"
o: "addr=<NFS_SERVER_IP>,nolock,soft,rw"
device: ":/docker/path/to/configs"
此解决方案需要您托管NFS服务器。另外请记住,这种方法适用于配置,但不适用于需要提供高性能访问的文件系统。
关于在整个环境中使docker-compose文件保持相同的问题:尽管从技术上可行,但大多数现代项目都由基本的compose文件以及特定于环境的卷,网络,图像等覆盖组成
答案 1 :(得分:0)
您的服务将在您的可用节点上随机部署。 我想您的“要挂载目录”在管理器节点上,因此像这样在管理器节点上部署所需的服务。
deploy:
placement:
constraints:
- node.role == manager