Intereting Posts
Как начать PHP7.0-FPM в Dockerfile? Использование sudo внутри не-привилегированного контейнера-докера не работает Как автоматически удалить данные контейнера с хоста, когда rm контейнер? Официальный контейнер MySQL Docker не кэширует запросы? Доксорные порты для API-интерфейсов Flask Apache в Докере не будет предоставлять сайт laravel Как я могу исправить разрешения с помощью docker на томе bluemix? Обновить ключи Gogs SSH через файл заменить? Не удается подключить сеть хоста по имени от мостового контейнера Docker Изображение docker MySQL не работает как локальный сервер MySQL Как протоколировать ошибки пакета установки сборки докеров Можно ли взять дамп потока java-процесса в контейнере с хоста? Установка Haskell в контейнере докеров с использованием сбоя стека: слишком много открытых файлов Как изменить точку монтирования PostgreSQL через Docker? папка общего доступа докеров из контейнера в систему хоста

Возможно ли монтировать каталог при создании из Dockerfile?

Я пытаюсь создать изображение Docker, используя метод Dockerfile. Минимизация размера изображения и количества слоев очень важна для этого конкретного приложения. Тем не менее, частота вращения, необходимая для установки, довольно велика, и я не хочу испечь это изображение. Похоже, что если я использую команду ADD в файле Docker, rpm будет скопирован в изображение как свой собственный слой, и после его использования с ним не удастся удалить его. Чтобы обойти это, мы просто запускаем контейнер в интерактивном режиме с опцией монтирования тома -v для совместного использования папки, содержащей rpm, но фактически не копируя rpm в контейнер. Есть ли способ сделать что-то вроде опции -v во время выполнения команды сборки docker с помощью Dockerfiles?

Метод, с которым столкнулся сотрудник, состоит в том, чтобы использовать docker run и docker commit :

 docker run --name=$name --volume=$PWD/ToInstall/:/scratch --workdir=/scratch centos /scratch/install-script.sh echo Status is $(docker wait $name) echo docker commit $name myname-base docker rm -f $name 

install-script.sh будет что-то вроде:

 set -eux rpm -i myrpm1.rpm rpm -i myrpm2.rpm rm -rf /something-else-you-want-removed-from-layer 

Чао!

Когда вы помещаете RPM-файл в ту же папку, что и файл Docker, вы можете получить к нему доступ из вашего файла:

 YourFolder |---- Dockerfile |---- ToInstall |---- rpm_1.rpm |---- rpm_2.rpm 

Теперь вы можете запустить команду в своем файле Docker:

 RUN rpm -i /ToInstall/rpm_1.rpm