标签: docker-registry-mirror

是否可以在 docker daemon 配置文件中使用环境变量

背景:

\n\n

我们在文件中使用registry_mirrors&insecure_registries选项docker daemon.json。我们想停止设置mirrors 硬编码的位置。

\n\n

问题

\n\n

env variable里面可以用吗daemon.json?因此,ip X.Y.Z.W:PORT我们不应该写,而应该写 ${REPO1}. 希望可以REPO1在不重新启动的情况下更改 vardaemon

\n\n

评论

\n\n

该解决方案必须允许在不重新启动守护程序的情况下更改repo位置

\n\n

编辑

\n\n

无法在 daemon.json\n1 中使用以下内容。${VAR_NAME}

\n\n

可能的解决方法

\n\n

使用自定义主机名并在/etc/hosts. 这允许在不重新启动守护进程的情况下更改存储库ip它不允许改变portprotocol

\n\n

可能的解决方法2

\n\n
\n

某些选项可以在守护程序运行时重新配置,而无需重新启动进程。我们在 Linux 中使用 SIGHUP 信号来重新加载,在 Windows 中使用全局事件,键为 Global\\docker-daemon-config-$PID。可以在配置文件中修改这些选项,但仍会检查与提供的标志是否存在冲突。如果存在冲突,守护进程将无法重新配置自身,但它不会\xe2\x80\x99t停止执行

\n
\n\n

因此可以编辑registry和 dosudo systemctl …

docker docker-registry docker-registry-mirror docker-daemon

5
推荐指数
0
解决办法
607
查看次数

我可以在 Dockerfile FROM 语句中引用环境变量吗?

我想做的是这样的:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine
# more stuff
Run Code Online (Sandbox Code Playgroud)

但是,这需要在无法访问互联网的隔离的干净构建机器上运行,因此我需要通过本地镜像服务器(例如 Artifactory 或 Nexus 或其他类似的东西)路由它

如果 docker 镜像托管在 docker hub 上(例如来自 ubuntu),那么--registry-mirrors docker配置选项将为我们解决这个问题。
但是因为微软决定不使用 docker hub,所以注册表镜像也不起作用。

经过一番努力,我已经为 mcr.microsoft.com 设置了自定义域镜像,现在我可以执行以下操作:

FROM microsoft-docker-mirror.local.domain/dotnet/core/aspnet:3.0-alpine
# more stuff
Run Code Online (Sandbox Code Playgroud)

这样可行。但是我们有远程工作人员,他们可能不在本地办公室 LAN 上,并且看不到我的本地镜像服务器。我现在想做的是根据环境改变它。例如

ENV MICROSOFT_DOCKER_REPO mcr.microsoft.com
FROM ${MICROSOFT_DOCKER_REPO}/dotnet/core/aspnet:3.0-alpine
Run Code Online (Sandbox Code Playgroud)

我的独立构建机器将设置MICROSOFT_DOCKER_REPO环境变量,其他人的机器将使用默认值mcr.microsoft.com

反正。将行添加ENV到 dockerfile 会导致 docker 抛出此错误:

Error response from daemon: No build stage in current context
Run Code Online (Sandbox Code Playgroud)

似乎有很多参考文献指出 FROM 行必须是文件中的第一行,甚至在任何注释之前......我如何在 FROM 语句中引用环境变量?或者,如何使注册表镜像适用于 docker hub 之外的事物?

谢谢!

docker docker-registry docker-registry-mirror

2
推荐指数
1
解决办法
1063
查看次数