Today I wanted to write about a quick Linux and Docker/containers tip. I might write more of these, as I have gathered a non-trivial amount of Linux and Ubuntu tips, tweaks and miscellaneous things (plus some related adventures at work) that might be worth sharing.
Since Ubuntu 20.04 (and earlier at Debian), /bin
and /sbin
are symlinks to /usr/bin
. While this sounds nice and simple, it is good to be aware of this change when migrating containers from Ubuntu bionic
to focal
, because, if they copied any binary or script to /bin
, now they will error.
The error if attempting to move stuff to /bin
, while hinting the issue, is not 100% clear. It'll be something along the lines of:
ERROR: cannot copy to non-directory: /var/lib/docker/overlay2/<a-big-hash>/merge/bin
If you inspect the contents of the layer, or just do a quick test like RUN ls -al /bin
before moving your script(s), you will notice the presence of the symlink instead of either nothing or a folder.
The solution is simple, just move the scripts to /usr/bin
instead. And for clarity, change your script invocations to also run /usr/bin/<script-name>.sh
and the like. Although /bin/<script-name>.sh
will still work, it might not be clear why there are multiple, different paths.
Tags: Containerization Operating Systems Systems-IT Troubleshooting