web-dev-qa-db-ja.com

ECSコンテナでEBSボリュームを使用するにはどうすればよいですか

EBSボリュームを作成し、コンテナインスタンスにアタッチしてマウントしました。タスク定義ボリュームで、マウントされたディレクトリを使用してボリュームのソースパスを設定しました。コンテナデータはマウントされたディレクトリに作成されていません。マウントされたEBS以外の他のすべてのディレクトリは正しく機能します。

目的は、コンテナからデータを保存し、これを使用して別のボリュームでデータをバックアップすることです。

この添付ボリュームをコンテナで使用する方法はありますか?または、ボリュームとバックアップを操作するためのより良い方法です。

[〜#〜] edit [〜#〜]:ボリュームを指定して実行しているランダムなDockerイメージでテストしましたが、同じ問題に直面しました。 Dockerサービスを再起動して動作させることができましたが、Dockerを再起動せずに解決策を探しています。

マウントされたEBSであるボリュームディレクトリを持つコンテナの検査

"HostConfig": {
  "Binds": [
  "/mnt/data:/data"
],
...
"Mounts": [
  {
    "Source": "/mnt/data",
    "Destination": "/data",
    "Mode": "",
    "RW": true,
    "Propagation": "rprivate"
  }
],

ディレクトリが表示されます:

$ ls /mnt/data/
lost+found

マウントされたEBSではないボリュームディレクトリを持つコンテナの検査

"HostConfig": {
  "Binds": [
    "/home/ec2-user/data:/data"
  ],
...
"Mounts": [
  {
    "Source": "/home/ec2-user/data",
    "Destination": "/data",
    "Mode": "",
    "RW": true,
    "Propagation": "rprivate"
  }
]

ディレクトリが表示されます:

$ ls /home/ec2-user/data
databases dbms
10
Conrado Fonseca

AWS EC2 Launch Configurations を利用することが潜在的にやりたいことのようです。 Launch Configurationsを使用して、起動時にインスタンスに作成およびアタッチされるEBSボリュームを指定できます。これは、Dockerエージェントと後続のタスクが開始される前に発生します。

起動構成の一部として、ユーザーデータの下の構成の詳細を次の行に沿って更新することもできます。

mkdir /data;
mkfs -t ext4 /dev/xvdb;
mount /dev/xvdb /data;
echo '/dev/xvdb /data ext4 defaults,nofail 0 2' >> /etc/fstab;

次に、コンテナがホスト上の/dataにアクセスするように設定されている限り、すべてが最初から機能します。

ボーナス:ECSクラスターを使用している場合は、インスタンスをクラスターに参加させるために既に起動構成を使用していると思います。そうでない場合は、次のようなものを使用して、新しいインスタンスを自動的に追加することもできます。

#!/bin/bash 
docker pull Amazon/amazon-ecs-agent
docker run --name ecs-agent --detach=true --restart=on-failure:10 --volume=/var/run/docker.sock:/var/run/docker.sock --volume=/var/log/ecs/:/log --volume=/var/lib/ecs/data:/data --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro   --volume=/var/run/docker/execdriver/native:/var/lib/docker/execdriver/native:ro --publish=127.0.0.1:51678:51678 --env=ECS_LOGFILE=/log/ecs-agent.log --env=ECS_AVAILABLE_LOGGING_DRIVERS=[\"json-file\",\"syslog\",\"gelf\"] --env=ECS_LOGLEVEL=info --env=ECS_DATADIR=/data --env=ECS_CLUSTER=your-cluster-here Amazon/amazon-ecs-agent:latest

特にそのビットでは、この部分を編集する必要があります:--env=ECS_CLUSTER=your-cluster-here

お役に立てれば。

4
MrDuk

タスクでのデータボリュームの使用 に関する現在のドキュメントは、この問題に対処しているようです。

Amazon ECSに最適化されたAMIバージョン2017.03.aがリリースされる前は、Dockerデーモンの起動時に使用可能だったファイルシステムのみがDockerコンテナーで使用可能でした。 この制限を回避するために最新のAmazon ECS最適化AMIを使用するか、dockerパッケージを最新バージョンにアップグレードしてDockerを再起動できます。

0
jfrantzius