我正在尝试使用持久存储运行任务。该任务执行docker镜像,该镜像创建目录并将文件复制到其中。但是,当任务定义将卷装入创建的目录时,文件将丢失。
为简洁起见,Dockerfile的相关行是:
RUN mkdir /root/createdDir
COPY ./myFile.txt /root/createdDir/myFile.txt
任务定义JSON的相关字段是:
{
"containerDefinitions":[
{
...,
"mountPoints": [
{
"readOnly": null,
"containerPath": "/root/createdDir",
"sourceVolume": "shared"
}
],
"image": "myImage"
}]
"volumes": [
{
"name": "shared",
"host": {
"sourcePath": null
}
}]
}
运行任务时,无法再找到该文件。如果我在没有向容器添加挂载点的情况下运行任务,则该文件仍然存在。
尝试使用docker-compose
在本地执行此操作时,我可以使用相同的Dockerfile
,并在docker-compose.yml
文件中将以下规范添加到服务卷:shared:/root/createdDir
,其中shared是在docker-compose.yml
中使用本地驱动程序声明的卷。
答案 0 :(得分:3)
将卷安装到容器上的现有目录中的行为可能会令人困惑。它与Linux的mount:
的一般行为一致以前的内容(如果有的话)和dir的所有者和模式变得不可见。
尽可能避免这样做,因为当卷和容器具有相同名称的文件时,它可能导致难以发现的问题。