AWS ECS卷不共享任何文件

我有一个已经挂载到AWS ECS集群实例的EBS卷。 此EBS卷安装在/data

 $ cat /etc/fstab ... UUID=xxx /data ext4 defaults,nofail 0 2 $ ls -la /data total 28 drwxr-xr-x 4 1000 1000 4096 May 14 06:11 . dr-xr-xr-x 26 root root 4096 May 15 21:18 .. drwxr-xr-x 4 root root 4096 May 14 06:11 .ethereum drwx------ 2 1000 1000 16384 May 14 05:29 lost+found 

编辑:/ proc / mounts的输出

 [ec2-user@xxx ~]$ cat /proc/mounts proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 /dev/xvda1 / ext4 rw,noatime,data=ordered 0 0 devtmpfs /dev devtmpfs rw,relatime,size=4078988k,nr_inodes=1019747,mode=755 0 0 devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /dev/shm tmpfs rw,relatime 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0 cgroup /cgroup/blkio cgroup rw,relatime,blkio 0 0 cgroup /cgroup/cpu cgroup rw,relatime,cpu 0 0 cgroup /cgroup/cpuacct cgroup rw,relatime,cpuacct 0 0 cgroup /cgroup/cpuset cgroup rw,relatime,cpuset 0 0 cgroup /cgroup/devices cgroup rw,relatime,devices 0 0 cgroup /cgroup/freezer cgroup rw,relatime,freezer 0 0 cgroup /cgroup/hugetlb cgroup rw,relatime,hugetlb 0 0 cgroup /cgroup/memory cgroup rw,relatime,memory 0 0 cgroup /cgroup/perf_event cgroup rw,relatime,perf_event 0 0 /dev/xvdf /data ext4 rw,relatime,data=ordered 0 0 

现在,我想在我的ECS任务定义/data/.ethereum作为Docker卷挂载到/geth/.ethereum

 { ... "containerDefinitions": [ { ... "volumesFrom": [], "mountPoints": [ { "containerPath": "/geth/.ethereum", "sourceVolume": "ethereum_datadir", "readOnly": null } ], ... } ], ... "volumes": [ { "host": { "sourcePath": "/data/.ethereum" }, "name": "ethereum_datadir" } ], ... } 

运行该任务后,显示卷正确安装:

 $ docker inspect -f '{{ json .Mounts }}' f5c36d9ea0d6 | python -m json.tool [ { "Destination": "/geth/.ethereum", "Mode": "", "Propagation": "rprivate", "RW": true, "Source": "/data/.ethereum" } ] 

如果我在安装点内的容器内创build文件,它将不会在主机上。

 [ec2-user@xxx .ethereum]$ docker exec -it f5c36d9ea0d6 bash root@f5c36d9ea0d6:/geth# cat "Hello World!" > /geth/.ethereum/hello_world.txt cat: Hello World!: No such file or directory root@f5c36d9ea0d6:/geth# echo "Hello World!" > /geth/.ethereum/hello_world.txt root@f5c36d9ea0d6:/geth# cat /geth/.ethereum/hello_world.txt Hello World! root@f5c36d9ea0d6:/geth# exit exit [ec2-user@xxx ~]$ cat /data/.ethereum/hello_world.txt cat: /data/.ethereum/hello_world.txt: No such file or directory 

不知何故文件系统不被共享。 有任何想法吗?

发现问题。 看起来像Docker,在Docker守护进程启动之前 ,必须创build主机实例上的任何挂载点(例如EBS卷),否则Docker会将文件写入实例的根文件系统,而不会发现。

我停止Docker,卸载EBS卷,清理所有东西,再次安装EBS卷,然后启动Docker。 现在,Docker似乎认识到挂载点,并将所有内容写入我的EBS卷中。