gpt4 book ai didi

linux - AWS ECS 卷不共享任何文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:55 25 4
gpt4 key购买 nike

我有一个已安装到 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

现在,我想将 /data/.ethereum 作为 Docker 卷挂载到我的 ECS 任务定义中的 /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"
}
]

但是,如果我在挂载点内的容器内创建文件,它不会存在于主机上。

[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,主机实例上的任何挂载点(例如对于 EBS 卷)都必须在 Docker 守护进程启动之前创建,否则 Docker 会将文件写入实例的根文件系统而无需你甚至注意到了。

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

关于linux - AWS ECS 卷不共享任何文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43989735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com