docker 镜像可以访问 tmp 目录吗?

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。

Mat*_*att 8

/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