Еще один вопрос о символической ссылке Docker. У меня есть куча файлов, которые я хочу скопировать во все свои сборки Docker. Моя структура каталога:
parent_dir
- common_files
- file.txt
- dir1
- Dockerfile
- symlink -> ../common_files
В приведенном выше примере я хочу, чтобы файл file.txt копировался при сборке докеров внутри dir1. Но я не хочу поддерживать несколько копий file.txt. По этой ссылке, начиная с версии докера 0.10 , сборка докера должна
Следуйте символическим ссылкам внутри корня контейнера для инструкций по сборке ADD.
Но у меня нет такого файла или каталога, когда я создаю любую из этих строк в моем Dockerfile:
ADD symlink /path/dirname
или
ADD symlink/file.txt /path/file.txt
вариант монтирования НЕ решит эту проблему для меня (кроссплатформенность ...). Я безуспешно пытался tar -czh . | docker build -t
.
Есть ли способ заставить Docker следовать символической ссылке и скопировать common_files / file.txt во встроенный контейнер?
Follow symlinks inside container's root for ADD build instructions.
означает, что внутри контейнера следуют символические ссылки. Не в каталоге контекста сборки. ВADD file.txt /dir/file.txt
каталогеdir
может быть символическая ссылка. Аргументы, которые я привел в своем ответе, все еще действительны, а символические ссылки все еще не поддерживаются в последней версии. Вы можете столкнуться с проблемами (относительно повторяемости), когда храните символические ссылки в системах контроля версий, таких как git . Поэтому обратитесь к этому вопросу .Одна из возможностей - запустить сборку в родительском каталоге с помощью:
(Или, что то же самое, в дочернем каталоге)
Dockerfile необходимо настроить для копирования / добавления с соответствующими путями. В зависимости от ваших настроек вы можете захотеть,
.dockerignore
чтобы родительский элемент исключал вещи, которые вы не хотите помещать в контекст.источник
Если у кого-то все еще есть эта проблема, я нашел очень хорошее решение на superuser.com:
/superuser/842642/how-to-make-a-symlinked-folder-appear-as-a-normal-folder
Он в основном предлагает использовать tar для разыменования символических ссылок и передачи результата в сборку докера:
источник
вместо использования simlinks можно решить проблему административно, просто переместив файлы из sites_available в sites_enabled вместо копирования или создания simlink
поэтому конфигурация вашего сайта будет в одной копии только в папке site_available, если она остановлена или что-то в этом роде, или в sites_enabled, если ее следует использовать
источник
Я знаю, что это нарушает переносимость сборки докеров, но вы можете использовать жесткие ссылки вместо символических:
источник