我想做的是这样
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine
# more stuff
但是,这需要在没有Internet访问权限的隔离的干净构建机器上运行,因此我需要通过本地镜像服务器(例如Artifactory或Nexus或其他类似的东西)路由它
如果docker映像托管在docker hub上(例如FROM ubuntu),那么--registry-mirrors docker
配置选项将为我们解决该问题。
但是,因为微软已决定不使用docker hub,因此注册表镜像也无法正常工作。
经过大量的努力,我为mcr.microsoft.com设置了一个自定义域镜像,因此现在我可以这样做:
FROM microsoft-docker-mirror.local.domain/dotnet/core/aspnet:3.0-alpine
# more stuff
那行得通。但是我们有一些远程工作人员,他们可能不在本地办公室LAN上,并且看不到我的本地镜像服务器。我现在想做的是根据环境而定。例如
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语句中引用环境变量?或者,如何使注册表镜像适用于非docker hub的事物?
谢谢!
答案 0 :(得分:2)
“ ARG
是FROM
”-Dockerfile reference中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 .