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构建我的图像。
有人能帮我吗?
谢谢 :-)
如果可能,您可以使用放置约束将此服务限制为具有所需主机路径的节点。但是我猜测在这个用例中这不是一个选项。主机安装的卷实际上不应该在集群部署中使用,因为它会导致节点之间的文件系统中出现冗余数据。(所有文件都需要存在于所有节点上)。
一种解决方案是实施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 文件以及针对卷、网络、图像等的环境特定覆盖。
| 归档时间: |
|
| 查看次数: |
18895 次 |
| 最近记录: |