我想知道是否有一个简单的方法来利用亚马逊EFS(弹性文件系统)被挂载为一个卷在一个本地码头组成设置。
原因是对于本地开发,创建的卷会保存在我的笔记本电脑上-如果我更换机器,我无法访问任何底层数据。云NFS将解决这个问题,因为它随时可以从任何地方获得。
AWS文档(https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html)似乎建议使用AWS Direct Connect/VPN-是否有办法通过在侦听所有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抓取设置,并将数据量持久化在云中,这样我就可以从任何地方连接到它。
3条答案
按热度按时间3pmvbmvn1#
EFS假定nfs 4,因此:
当然,引用的nfs-export/path必须存在,Swarm不会自动创建不存在的文件夹。
在重新创建堆栈之前,请确保手动删除所有具有此错误类型/名称的旧Docker卷(在所有群节点上!):
了解这一点很重要:Docker NFS卷实际上只是声明在哪里可以找到数据。当您更新docker-composite.yml时,它不会更新,因此您必须删除该卷,以便显示任何新配置
参见输出
有关卷无法装入的原因的详细信息
此外,请确保您可以通过
mount -t nfs4 ...
挂载nfs-export参见
showmount -e your.efs.ip.address
6ss1mwsb2#
这让我用得很好
5rgfhyps3#
简而言之,答案是否定的,如果没有VPN或端口重定向,就不可能在本地计算机或在AWS VPC之外运行的任何东西上挂载EFS卷:EFS使用子网CIDR范围内的专用IP,它没有公用IP,并且它的DNS是内部DNS,无法从Internet解析。
如果可以的话,您可以使用S3(我能想到的第一个警告:没有UNIX许可)。
在Linux上,s3fs是一个可靠的选项。
安装和挂载后,您可以将其用作部署中的卷,就像任何其他目录一样,您还可以将其自动化,如here所示,方法是将
s3fs
作为容器运行,并将其挂载到辅助容器中(如果您希望直接访问文件,则可以在本地挂载):在
.env
文件中,将您的授权设置为S3:然后转换为
docker-compose.yaml
: