8

I want to create a docker image where I add a file to the /dev folder. I'm using this Dockerfile:

FROM ubuntu:bionic
COPY test.txt /dev/

After building this with:

docker build -t test .

I get a docker image where nothing has been added to the /dev folder. No error has been thrown by docker build.

I find this very strange because copying to different folders works fine. For example

  • COPY test.txt /
  • COPY test.txt /root/
  • COPY test.txt /home/

all work fine.

Does the /dev folder have some special permissions? How do I copy a file to the /dev folder?

I'm using Docker Toolbox on windows.

k0pernikus
  • 60,309
  • 67
  • 216
  • 347
Floris Devreese
  • 3,127
  • 2
  • 21
  • 31

2 Answers2

11

/dev is a special folder on linux systems reserved to maintain the devices related ressources (filesystem, disks, etc...) and mounted on a special filesystem. In a docker container, it will be remounted with a tmpfs dedicated filesystem and is not on the main container filesystem (/). See the following example:

$ docker run -it --rm ubuntu:18.04
root@17b9ad96ccbc:/# df -h /dev/
Filesystem      Size  Used Avail Use% Mounted on
tmpfs            64M     0   64M   0% /dev

In your case, your file was actually copied during the build but in a temporary filesystem that died as soon as the build was finished.

Conclusion: don't use /dev as a destination, choose an other folder.

Zeitounator
  • 38,476
  • 7
  • 53
  • 66
0

I think /dev is mounted when the container is created, so if you really need it you can copy (or symlink) a file into it after that, e.g. on a entrypoint.sh script:

#!/bin/bash
set -e

ln -s /app/my_virtual_device /dev/my_virtual_device

exec "$@"

Then reference it on the Dockerfile:

FROM ...

...

ENRTYPOINT ["bash", "entrypoint.sh"]
Sergio
  • 1