【问题标题】:Docker Swarm error - invalid mount config for typeDocker Swarm 错误 - 类型的挂载配置无效
【发布时间】:2019-12-29 16:36:08
【问题描述】:

这是我的 Docker 组合/堆栈文件。当我在单个节点上部署时,一切正常,但是当我在多个节点上部署时,出现以下错误:

类型绑定绑定源路径的无效挂载配置不存在

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 使用相同的文件来构建我的图像。

有人可以帮我吗?

谢谢你:-)

【问题讨论】:

  • 在这种情况下依赖主机卷并不理想。我建议创建一个Dockerfile 并在构建期间复制证书和主题。然后只需将其添加到 yml。

标签: docker-compose docker-swarm docker-stack


【解决方案1】:

如果可能,您可以将此服务限制为具有所需主机路径的节点,该节点使用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 文件以及针对卷、网络、图像等的特定于环境的覆盖.

【讨论】:

    【解决方案2】:

    在一个集群中,您的服务将随机部署在您的可用节点上。 我想你的“要挂载的目录”在管理器节点上,所以像这样在管理器节点上部署想要的服务。

    deploy:
        placement:
            constraints:
                - node.role == manager
    

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 2022-12-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2022-06-20
      • 2018-05-20
      相关资源
      最近更新 更多