我知道只需运行以下命令即可获得 Docker 引擎的架构:
root@minus:~# docker info | grep Architecture
Architecture: armv7l
Run Code Online (Sandbox Code Playgroud)
我还在其他架构上测试过它,它运行良好(aarch64在 arm64 和x86_64我的英特尔服务器上)。
我的问题是有一个特殊的变量(可以像参数一样使用),其架构在 Dockerfile 中可用。我知道可以为此使用 an ARG,但这意味着它必须由调用者设置,我想要更自动的东西。
我会用它来自动下载架构的正确图像。我已经搜索了很多,但没有找到任何东西,如果有办法,我会很高兴;)。
提前致谢。
Bob*_*ers 17
在一些官方 Docker 镜像中,有基于架构的条件代码执行的示例。golang例如,Dockerfile 使用包管理器报告架构,然后有条件case地运行语句,所有这些都在来自RUN. 来自golang 1.13:alpine:
RUN ...
apkArch="$(apk --print-arch)"; \
case "$apkArch" in \
armhf) export GOARM='6' ;; \
x86) export GO386='387' ;; \
esac; \
...
Run Code Online (Sandbox Code Playgroud)
在Debian 版本中,dpkg使用 , 代替apk:
dpkgArch="$(dpkg --print-architecture)"; \
Run Code Online (Sandbox Code Playgroud)
如果您使用 BuildKit 进行构建,则可以使用一些预定义的 ARG:
- TARGETPLATFORM - 构建结果的平台。例如 linux/amd64、linux/arm/v7、windows/amd64。
- TARGETOS - TARGETPLATFORM 的操作系统组件
- TARGETARCH - TARGETPLATFORM 的架构组件
- TARGETVARIANT - TARGETPLATFORM 的变体组件
- BUILDPLATFORM - 执行构建的节点的平台。
- BUILDOS - BUILDPLATFORM 的操作系统组件
- BUILDARCH - BUILDPLATFORM 的 OS 组件
- BUILDVARIANT - BUILDPLATFORM 的操作系统组件
这些记录在构建器文档的“全局范围内的自动平台 ARG”中。
要使用 BuildKit,您可以在 shell 中使用变量启用它:
export DOCKER_BUILDKIT=1
Run Code Online (Sandbox Code Playgroud)
然后构建使用docker build(正在使用 docker-compose 支持 BuildKit,可能在下一个版本中)。
| 归档时间: |
|
| 查看次数: |
2203 次 |
| 最近记录: |