Я застрял в доступе к доле nfs4 в контейнере докера, работающем на эластичном бобовом стебле.Docker nfs4 mount on Elastic Beanstalk
Netshare работает и работает на экземпляре EC2, работающем в контейнере Docker. Установка совместного использования nfs на экземпляр работает, я могу без проблем получить доступ к ресурсу экземпляра EC2.
Однако, когда я запускаю контейнер, пытаясь установить том nfs4, файлы не отображаются внутри контейнера.
Я делаю это. Во-первых, начать 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: ''
Затем на хосте Докер, запустите контейнер Докер. Используйте -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
[email protected]:/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
внутри недавно запущенного контейнера - но его пусто ?!
[email protected]:/usr/src/app# ls /home/ec2-user/xxx/
[email protected]:/usr/src/app#
Как ни странно, объем NFS правильно установлен на хосте:
[[email protected] ~]$ 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
. Контейнер докера работает как root
.
Что мне не хватает?
UPDATE
Если я запустить контейнер в режиме --privileged
, монтаж ООПП разделяют непосредственно внутри контейнера становится возможным:
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).
UPDATE 2
Вот еще один обходной путь:
- смонтировать общий ресурс на хост-компьютере в
/target
- рестарта грузчиком на хосте
- запустить контейнер
docker run -it -v /target:/mnt image /bin/bash
/mnt
теперь заселен, как ожидалось.
Спасибо, это отлично поработало для меня. Единственное, что я не понял, это строка в вашем .config: 05restart-ecs: команда: docker start ecs-agent Что такое «ecs-agent» – Neil
От https://github.com/aws/amazon-ecs -agent: «Amazon ECS Container Agent - это программное обеспечение, разработанное для Amazon EC2 Container Service (Amazon ECS). Оно работает на экземплярах контейнеров и запускает контейнеры от имени Amazon ECS». – sebastian
Спасибо markplindsay за добавление деталей, я не потратил время, чтобы записать все. – sebastian