Докер следит за символикой вне контекста

Еще один вопрос о симфонии Докера. У меня есть куча файлов, которые я хочу скопировать на все мои сборки Docker. Моя структура:

parent_dir
    - common_files
        - file.txt
    - dir1
        - Dockerfile  
        - symlink -> ../common_files

В приведенном выше примере я хочу, чтобы файл file.txt был скопирован, когда я создаю docker внутри dir1. Но я не хочу поддерживать несколько копий файла file.txt. По этой ссылке, начиная с версии докеры 0.10, сборка докеров должна

Следуйте символическим ссылкам внутри корня контейнера для инструкций сборки ADD.

Но у меня нет такого файла или каталога, когда я строю одну из этих строк в моем файле Docker:

ADD symlink/path/dirname или ADD symlink/file.txt/path/file.txt

вариант mount НЕ РЕШЕТ для меня (кросс-платформа...). Я попробовал tar -czh. | docker build -t tar -czh. | docker build -t tar -czh. | docker build -t без успеха.

Есть ли способ заставить Docker следовать символической ссылке и скопировать файл common_files/file.txt в встроенный контейнер?

Ответы

Ответ 1

Это невозможно и не будет реализовано. Пожалуйста, ознакомьтесь с обсуждением проблемы github # 1676:

Мы этого не допускаем, потому что это не повторяемо. Символьная ссылка на вашем компьютере - это не то же самое, что и моя машина, и тот же файл Docker будет производить два разных результата. Также наличие символических ссылок на /etc/paasswd вызовет проблемы, поскольку оно свяжет файлы хоста, а не ваши локальные файлы.

Ответ 2

Для всех, кто с этой проблемой, см. Эту ссылку. Лично я выбрал решение "построить общее базовое изображение", и он работает блестяще.

Ответ 3

Одна из возможностей - запустить сборку в родительском каталоге, используя:

$ docker build [tags...] -f dir1/Dockerfile .

(Или, что то же самое, в дочерней директории)

$ docker build  [tags...] -f Dockerfile ..

Файл Docker должен быть настроен для копирования/добавления с помощью соответствующих путей. В зависимости от вашей установки вы можете захотеть, .dockerignore в родительском .dockerignore оставил те вещи, которые вы не хотите вводить в контекст.

Ответ 4

вместо использования simlinks можно решить проблему административно, просто переместив файлы с sites_available на sites_enabled вместо копирования или создания simlinks

так что ваш конфиг сайта будет в одном экземпляре только в папке site_available, если он остановился или что-то еще, или в sites_enabled, если он должен использоваться