Могу ли я ссылаться на переменную среды в инструкции Dockerfile FROM?
Я бы хотел сделать следующее:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine
# more stuff
Но это должно работать на изолированной машине чистой сборки, у которой нет доступа к Интернету, поэтому мне нужно направить его через локальный зеркальный сервер (например, Artifactory или Nexus или другое подобное)
Если образ докера был размещен на концентраторе докеров (например, из ubuntu), то --registry-mirrors docker
вариант конфигурации решит это за нас.
НО, поскольку Microsoft решила не использовать Docker Hub, зеркальное отображение реестра тоже не работает.
После долгих усилий я установил зеркало личного домена для 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
строка в файл докера приводит к тому, что докер выдает эту ошибку:
Error response from daemon: No build stage in current context
Кажется, есть много ссылок на тот факт, что строка FROM должна быть первой строкой в файле, даже до любых комментариев... Как я могу ссылаться на переменную среды в моем операторе FROM? Или, в качестве альтернативы, как я могу заставить зеркала реестра работать для вещей, которые не являются Docker Hub?
Спасибо!
1 ответ
"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 .