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
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
お役に立てれば。
タスクでのデータボリュームの使用 に関する現在のドキュメントは、この問題に対処しているようです。
Amazon ECSに最適化されたAMIバージョン2017.03.aがリリースされる前は、Dockerデーモンの起動時に使用可能だったファイルシステムのみがDockerコンテナーで使用可能でした。 この制限を回避するために最新のAmazon ECS最適化AMIを使用するか、dockerパッケージを最新バージョンにアップグレードしてDockerを再起動できます。