我想知道是否有一种简单的方法可以使用Amazon EFS (弹性文件系统)在本地docker-compose设置中作为卷进行挂载。
原因是,对于本地开发,创建的卷保存在我的笔记本电脑上-如果我要更换机器,我无法访问任何底层数据。云NFS可以解决这个问题,因为它可以随时从任何地方使用。
亚马逊网络服务文档(https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html)似乎建议使用亚马逊网络服务直连/虚拟专用网络-有没有办法避免这种情况:在监听所有IP地址的安全组中打开端口2049 (NFS流量),并将该安全组应用于新创建的EFS?
这是我的docker-compose.yml:
version: "3.2"
services:
postgres_db:
container_name: "postgres"
image: "postgres:13"
ports:
- 5432:5432
volumes:
- type: volume
source: postgres_data
target: /var/lib/postgresql/data
volume:
nocopy: true
environment:
POSTGRES_USER: 'admin'
POSTGRES_PASSWORD: "password"
volumes:
postgres_data:
driver_opts:
type: "nfs"
o: "addr=xxx.xx.xx.xx,nolock,soft,rw"
device: ":/docker/example"我得到以下错误:
ERROR: for postgres_db Cannot start service postgres_db: error while mounting volume '/var/lib/docker/volumes/flowstate_example/_data': failed to mount local volume: mount :/docker/example:/var/lib/docker/volumes/flowstate_example/_data, data: addr=xxx.xx.xx.xx,nolock,soft: connection refused我将其解释为我的笔记本电脑连接不是AWS EFS VPC的一部分,因此无法挂载EFS。
为了增加上下文,我希望对接web抓取设置,并将数据卷持久存储在云中,这样我就可以从任何地方连接到它。
发布于 2021-01-18 18:57:12
EFS假设为nfs4,因此:
version: '3.8'
services:
postgres:
volumes:
postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
driver_opts:
type: "nfs4"
o: "addr=xxx.xx.xx.xx,nolock,soft,rw"
device: ":/docker/postgres_data"当然,引用的nfs-export/路径必须存在。Swarm不会自动创建不存在的文件夹。
确保手动删除此故障种类/名称的任何旧docker卷(在所有群集节点上!)在重新创建堆栈之前:
docker volume rm $(docker volume ls -f name=postgres_data -q)理解这一点很重要: Docker NFS卷实际上只是查找数据的声明。当您更新docker-compose.yml时,它不会更新,因此您必须删除该卷,以便出现任何新的配置
请参阅以下输出
docker service ps stack_postgres --no-trunc有关无法装载卷的详细信息,请参阅
还要确保您可以通过mount -t nfs4 ...挂载nfs-export
请参阅showmount -e your.efs.ip.address
发布于 2021-11-03 07:22:21
volumes:
nginx_test_vol:
driver_opts:
type: "nfs"
o: "addr=fs-xxxxxxxxxxxxxxxxxx.efs.us-east-1.amazonaws.com,rw,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"
device: ":/nginx-test"这使我很好地使用它。
https://stackoverflow.com/questions/64087211
复制相似问题