【发布时间】:2016-10-16 07:38:12
【问题描述】:
我无法访问在 Elastic Beanstalk 上运行的 docker 容器内的 nfs4 共享。
Netshare 在运行 Docker 容器的 EC2 实例上启动并运行。在实例上手动挂载 nfs 共享有效,我可以毫无问题地访问 EC2 实例上的共享。
但是,当我运行一个容器,尝试挂载一个 nfs4 卷时,文件并没有出现在容器内。
我这样做。首先,在 Docker 主机上启动 netshare 守护进程:
sudo ./docker-volume-netshare nfs
INFO[0000] == docker-volume-netshare :: Version: 0.18 - Built: 2016-05-27T20:14:07-07:00 ==
INFO[0000] Starting NFS Version 4 :: options: ''
然后,在 Docker 主机上,启动 docker 容器。使用-v 创建一个挂载nfs4 共享的卷:
sudo docker run --volume-driver=nfs -v ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com/home/ec2-user/nfs-share/templates:/home/ec2-user/xxx -ti aws_beanstalk/current-app /bin/bash
root@0a0c3de8a97e:/usr/src/app#
根据 netshare 守护进程,这很有效:
INFO[0353] Mounting NFS volume ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:/home/ec2-user/nfs-share/templates on /var/lib/docker-volumes/netshare/nfs/ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com/home/ec2-user/nfs-share/templates
所以我尝试在新启动的容器中列出 /home/ec2-user/xxx 的内容 - 但它是空的?!
root@0a0c3de8a97e:/usr/src/app# ls /home/ec2-user/xxx/
root@0a0c3de8a97e:/usr/src/app#
奇怪的是,nfs 卷已正确安装在主机上:
[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ sudo ls -lh /var/lib/docker-volumes/netshare/nfs/ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com/home/ec2-user/nfs-share/templates | head -3
total 924K
drwxr-xr-x 5 ec2-user ec2-user 4,0K 29. Dez 14:12 file1
drwxr-xr-x 4 ec2-user ec2-user 4,0K 9. Mai 17:20 file2
这可能是权限问题吗? nfs 服务器和客户端都使用ec2-user 用户/组。 docker 容器以root 运行。
我错过了什么?
更新
如果我以--privileged 模式启动容器,则可以直接在容器内挂载nfs 共享:
sudo docker run --privileged -it aws_beanstalk/current-app /bin/bash
mount -t nfs4 ec2-xxxx-xxxx-xxxx-xxxx.us-west-2.compute.amazonaws.com:/home/ec2-user/nfs-share/templates /mnt/
ls -lh /mnt | head -3
total 924K
drwxr-xr-x 5 500 500 4.0K Dec 29 14:12 file1
drwxr-xr-x 4 500 500 4.0K May 9 17:20 file2
很遗憾,这并不能解决问题,因为 Elastic Beanstalk 不允许特权容器(与 ECS 不同)。
更新 2
这是另一种解决方法:
- 将主机上的nfs共享挂载到
/target - 在主机上重启 docker
- 运行容器
docker run -it -v /target:/mnt image /bin/bash
/mnt 现在已按预期填充。
【问题讨论】:
标签: amazon-web-services amazon-ec2 docker amazon-elastic-beanstalk nfs