How to make a symlinked folder appear as a normal folder
I don't have much experience with docker
so I can't promise this will work but one choice would be to mount the directory instead of linking to it:
$ cd projects/app1
$ mkdir shared
$ sudo mount -o bind ../shared shared/
That will attach ../shared
to ./shared
and should be completely transparent to the system. As explained in man mount
:
The bind mounts.
Since Linux 2.4.0 it is possible to remount part of the file hierarchy somewhere else. The call is:
mount --bind olddir newdir
or by using this fstab entry:
/olddir /newdir none bind
After this call the same contents are accessible in two places.
This issue has come up repeatedly in the Docker community. It basically violates the requirement that a Dockerfile
be repeatable if you run it or I run it. So I wouldn't expect this ability, as described in this ticket: Dockerfile ADD command does not follow symlinks on host #1676.
So you have to conceive of a different approach. If you look at this issue: ADD to support symlinks in the argument #6094, a friend of ours from U&L (@Patrick aka. phemmer) provides a clever workaround.
$ tar -czh . | docker build -
This tells tar
to dereference the symbolic links from the current directory, and then pipe them all to the docker build -
command.
-c, --create
create a new archive
-h, --dereference
follow symlinks; archive and dump the files they point to
-z, --gzip, --gunzip --ungzip