我正在尝试了解docker镜像访问/ tmp /目录的程度。
在我的情况下,我使用frolvlad / alpine-oraclejdk8:苗条的图像,我的应用程序需要写入临时文件夹。
当我在docker-compose(v2)文件中定义这样的tmpfs时:
df_server:
image: "${DF_IMAGE}"
build: .
tmpfs:
- /tmp
我得到一个错误,说该目录已经存在。当我尝试从我的webapp访问该目录时,我收到一条错误消息,指出该目录不存在。
当我将tmpfs dir定义为其他内容时,例如
tmpfs:
- /foobar
我的webapp可以访问并使用foobar目录。
答案 0 :(得分:3)
大多数基于发行版的图片都会在图片中附带/tmp
目录。这将使用Docker设置使用的任何存储驱动程序。
$ docker run -ti frolvlad/alpine-oraclejdk8:slim ls -ld /tmp
drwxrwxrwt 2 root root 4096 Oct 18 18:58 /tmp
可写入
$ docker run -ti frolvlad/alpine-oraclejdk8:slim \
time dd if=/dev/zero of=/tmp/zero bs=4k count=64k
32768+0 records in
32768+0 records out
real 0m 0.84s
user 0m 0.00s
sys 0m 0.11s
挂载tmpfs会在内存/ tmp中添加
$ docker run -ti --tmpfs /tmp frolvlad/alpine-oraclejdk8:slim \
time dd if=/dev/zero of=/tmp/zero bs=4k count=64k
65536+0 records in
65536+0 records out
real 0m 0.13s
user 0m 0.01s
sys 0m 0.12s
你应该能够写作和阅读(不同的高山图像)
docker run -ti --tmpfs /tmp mhart/alpine-node node -e '
fs.writeFile(`/tmp/test`, `test`, (err, res) => {
console.log(`write`, err, res)
fs.readFile(`/tmp/test`, (err, data) => console.log(`read`, err, data))
})'
null undefined
null <Buffer 74 65 73 74>
我不确定你是如何得到“目录已存在”的错误。
也许在不同的Docker主机上尝试相同的操作?拉最新的frolvlad/alpine-oraclejdk8:slim
?