【问题标题】:Building an image via Dockerfile (creating a folder in /dev)通过 Dockerfile 构建镜像(在 /dev 中创建一个文件夹)
【发布时间】:2022-01-06 16:05:05
【问题描述】:

我正在尝试构建图像并出现以下错误:

npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /dev/lab3/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/dev/lab3/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

这里有 Dockerfile:

FROM node:latest
WORKDIR /dev/lab3
COPY server.js .
COPY package.json .
RUN mkdir /files
ADD ./files /files
RUN npm install
CMD ["npm", "start"]

看df -h:

root@279f05c372ce:/dev# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay         118G   13G   99G  11% /
tmpfs            64M     0   64M   0% /dev
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
shm              64M     0   64M   0% /dev/shm
/dev/sda5       118G   13G   99G  11% /etc/hosts
tmpfs           3.9G     0  3.9G   0% /proc/acpi
tmpfs           3.9G     0  3.9G   0% /proc/scsi
tmpfs           3.9G     0  3.9G   0% /sys/firmware

我的假设 - 在构建图像时,WORKDIR 将 /dev/lab3 设置为工作目录。 /dev 是 tmpfs 文件系统(临时),因此当创建下一层图像(COPY server.js 和 COPY package.json)时,没有 /lab3 文件夹。 你能确认一下吗?还是有其他解释?

【问题讨论】:

  • 欢迎来到 StackOverflow! /dev 不是应用程序文件的常见位置。您可以尝试改用/opt//src/ 吗?
  • 是的,我当然可以。但我希望获得关于 /dev 或一般 tmpfs 的解释 :)
  • /dev 是 linux 设备“文件”的特殊目录。 tldp.org/LDP/sag/html/dev-fs.html

标签: node.js docker npm dockerfile docker-image


【解决方案1】:

/dev 文件夹用于 Linux 中的设备(如硬盘和 tty)。用户应用程序不属于那里。 Docker 管理这个目录,因为 Linux 中需要一些特殊设备(例如/dev/zero/dev/random),因此它配置了一个内存文件系统(tmpfs)并将其挂载到容器文件系统命名空间中。当您在 Linux 中挂载目录时,只要该挂载存在(在这种情况下,在容器的生命周期内),底层文件系统中的文件和目录就会被隐藏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多