3

Elastic Beanstalkを実行しているドッカーコンテナ内のnfs4共有にアクセスできません。Docker nfs4 mount on Elastic Beanstalk

Netshareは、Dockerコンテナを実行しているEC2インスタンスで起動しています。インスタンスに手動で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: '' 

その後、ドッカーホスト上で、ドッキングウィンドウコンテナを開始します。 NetShareのデーモンによると、

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# 

が働いた:NFS4シェアをマウントするボリュームを作成するには -vを使用し

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

私はコンテナが可能となるの内側に直接共有NFSをマウント、--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

は、別の回避策です:

  1. がホスト上/target
  2. 再起動]ドッキングウィンドウにホスト上のNFS共有をマウント
  3. 実行コンテナdocker run -it -v /target:/mnt image /bin/bash

/mntは、期待どおりに作成されました。

答えて

3

@セバスチャンの "UPDATE 2"は、正しいトラック(感謝@セバスチャン)で私を得ました。

私が行ったようにGoogleからこの質問に達する可能性のある人は、Elastic BeanstalkにEFS(NFSv4)ファイルシステムを自動的にマウントしてコンテナで利用できるようにしたのです。その後

# .ebextensions/01-efs-mount.config 
commands: 
    01umount: 
    command: umount /mnt/efs 
    ignoreErrors: true 
    02mkdir: 
    command: mkdir /mnt/efs 
    ignoreErrors: true 
    03mount: 
    command: mount -t nfs4 -o vers=4.1 $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone).EFS_FILE_SYSTEM_ID.efs.AWS_REGION.amazonaws.com:/ /mnt/efs 
    04restart-docker: 
    command: service docker stop && service docker start 
    05restart-ecs: 
    command: docker start ecs-agent 

eb deploy

この.configファイルを追加します。デプロイが完了したら、あなたのEB EC2インスタンスにSSHし、それが働いていることを確認します。

ssh [email protected]_INSTANCE_IP 
ls -la /mnt/efs 

をあなたのEFSファイルシステム内のファイルが表示されるはずです。ただし、マウントが読み取り可能であり、コンテナ内で書き込み可能であることを確認する必要があります。

sudo docker run -v /mnt/efs:/nfs debian:jessie ls -la /nfs 

同じファイルリストが表示されます。

sudo docker run -v /mnt/efs:/nfs debian:jessie touch /nfs/hello 
sudo docker run -v /mnt/efs:/nfs debian:jessie ls -la /nfs 

ファイルリストと新しいhelloファイルが表示されます。

ls -la /mnt/efs 

また、helloファイルもコンテナの外側に表示されます。

最後に、Dockerrun.aws.json-v /mnt/efs:/nfsを使用する方法は次のとおりです。

{ 
    "AWSEBDockerrunVersion": 2, 
    "containerDefinitions": [ 
    { 
     "image": "AWS_ID.dkr.ecr.AWS_REGION.amazonaws.com/myimage:latest", 
     "memory": 128, 
     "mountPoints": [ 
     { 
      "containerPath": "/nfs", 
      "sourceVolume": "efs" 
     } 
     ], 
     "name": "myimage" 
    } 
    ], 
    "volumes": [ 
    { 
     "host": { 
     "sourcePath": "/mnt/efs" 
     }, 
     "name": "efs" 
    } 
    ] 
} 
+0

ありがとう、これは私にとって素晴らしい仕事でした。私が理解できなかったのはあなたの.config:05restart-ecs: コマンド:docker start ecs-agent "ecs-agent"とは – Neil

+0

https://github.com/aws/amazon-ecsから-agent:「Amazon ECSコンテナエージェントは、Amazon EC2コンテナサービス(Amazon ECS)用に開発されたソフトウェアで、コンテナインスタンス上で動作し、Amazon ECSの代わりにコンテナを起動します。 – sebastian

+1

詳細を追加していただきありがとうございましたmarkplindsay、私はすべてを書き留める時間がかかりませんでした。 – sebastian

関連する問題