Docker Swarm 错误 - 类型的安装配置无效

Dat*_*ery 5 docker-compose docker-swarm docker-stack

这是我的 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
Run Code Online (Sandbox Code Playgroud)

我知道卷路径也应该出现在所有其他节点上,但我认为这是一个非常糟糕的做法,而且我的其他 2 个节点无论如何都只是工作节点。我该如何解决这个问题?希望有一个解决方案可以让我保留这些卷,因为我使用相同的文件来docker-compose build构建我的图像。

有人能帮我吗?

谢谢 :-)

pat*_*pat 5

如果可能,您可以使用放置约束将此服务限制为具有所需主机路径的节点。但是我猜测在这个用例中这不是一个选项。主机安装的卷实际上不应该在集群部署中使用,因为它会导致节点之间的文件系统中出现冗余数据。(所有文件都需要存在于所有节点上)。

一种解决方案是实施NFS 卷

volumes:
  example:
    driver_opts:
      type: "nfs"
      o: "addr=<NFS_SERVER_IP>,nolock,soft,rw"
      device: ":/docker/path/to/configs"
Run Code Online (Sandbox Code Playgroud)

不过,此解决方案需要您托管 NFS 服务器。另请记住,此方法适用于配置,但不应用于需要提供高性能访问的文件系统。

关于在不同环境中保持 docker-compose 文件相同的问题:虽然技术上可以这样做,但大多数现代项目都包含一个基本的 compose 文件以及针对卷、网络、图像等的环境特定覆盖。