Могу ли я сослаться на переменную окружения в операторе FROM Dockerfile? - PullRequest
0 голосов
/ 02 октября 2019

То, что я хотел бы сделать, это:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine
# more stuff

Но это должно выполняться на изолированной машине с чистой сборкой, которая не имеет доступа к Интернету, поэтому мне нужно направить ее через локальныйзеркальный сервер (например, Artifactory или Nexus или другая подобная вещь)

Если образ докера был размещен на док-концентраторе (например, FROM Ubuntu), тогда опция конфигурации --registry-mirrors docker решит его для нас.
НО, потому чтоMicrosoft решила не использовать докер-концентратор, зеркальное отображение реестра тоже не работает.

После долгих усилий я настроил настраиваемое зеркальное отображение домена для mcr.microsoft.com, и теперь я могу сделатьэто:

FROM microsoft-docker-mirror.local.domain/dotnet/core/aspnet:3.0-alpine
# more stuff

Это работает. Но у нас есть удаленные работники, которые могут отсутствовать в локальной сети локального офиса и не могут видеть мой локальный зеркальный сервер. То, что я сейчас хочу сделать, это изменить его в зависимости от окружающей среды. Например,

ENV MICROSOFT_DOCKER_REPO mcr.microsoft.com
FROM ${MICROSOFT_DOCKER_REPO}/dotnet/core/aspnet:3.0-alpine

Моя изолированная сборочная машина установит переменную окружения MICROSOFT_DOCKER_REPO, и все остальные машины будут использовать значение по умолчанию mcr.microsoft.com

В любом случае. Добавление строки ENV в файл dockerfile приводит к тому, что docker выдает эту ошибку:

Error response from daemon: No build stage in current context

Кажется, есть много ссылок на тот факт, что строка FROM должна быть первой строкойв файле, даже до каких-либо комментариев ... Как я могу ссылаться на переменную окружения в моем предложении FROM? Или, в качестве альтернативы, как заставить зеркала реестра работать на вещи, которые не являются докер-хабами?

Спасибо!

1 Ответ

2 голосов
/ 02 октября 2019

"ARG - единственная инструкция, которая может предшествовать FROM в справочнике Dockerfile" - Dockerfile .

ARG MICROSOFT_DOCKER_REPO=mcr.microsoft.com
FROM ${MICROSOFT_DOCKER_REPO}/dotnet/core/aspnet:3.0-alpine

Сборка с нестандартным значением MICROSOFT_DOCKER_REPO используя --build-arg: docker build --rm --build-arg MICROSOFT_DOCKER_REPO=repo.example.com -t so:58196638 .

Примечание : вы можете передать --build-arg из среды хоста, т.е. MICROSOFT_DOCKER_REPO=repo.example.com docker build --rm --build-arg MICROSOFT_DOCKER_REPO=${MICROSOFT_DOCKER_REPO} -t so:58196638 .

...