AyK*_*rsi 7 docker docker-compose
我试图了解 docker 映像可以在多大程度上访问 /tmp/ 目录。
就我而言,我使用的是 frolvlad/alpine-oraclejdk8:slim 图像,我的应用程序需要写入临时文件夹。
当我在 docker-compose (v2) 文件中像这样定义 tmpfs 时:
df_server:
image: "${DF_IMAGE}"
build: .
tmpfs:
- /tmp
我收到一条错误消息,指出该目录已存在。当我尝试从 web 应用程序访问该目录时,收到一条错误消息,指出该目录不存在。
当我将 tmpfs 目录定义为其他任何内容时,例如
tmpfs:
- /foobar
我的 webapp 可以访问并使用目录 foobar。
/tmp大多数基于发行版的映像都会在映像内附带一个目录。这将使用 Docker 设置使用的任何存储驱动程序。
$ docker run -ti frolvlad/alpine-oraclejdk8:slim ls -ld /tmp
drwxrwxrwt 2 root root 4096 Oct 18 18:58 /tmp
Run Code Online (Sandbox Code Playgroud)
可以写入
$ 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
Run Code Online (Sandbox Code Playgroud)
安装 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
Run Code Online (Sandbox Code Playgroud)
你应该能够写入和读取它(不同的基于高山的图像)
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>
Run Code Online (Sandbox Code Playgroud)
我不确定您如何收到“目录已存在”错误。
也许在不同的 Docker 主机上尝试相同的操作?拉最新的frolvlad/alpine-oraclejdk8:slim?