是否可以在docker文件中获得docker引擎的体系结构?
我知道只需运行以下命令就可以获得Docker引擎的架构:是否可以在docker文件中获得docker引擎的体系结构?,docker,dockerfile,Docker,Dockerfile,我知道只需运行以下命令就可以获得Docker引擎的架构: root@minus:~# docker info | grep Architecture Architecture: armv7l 我还在其他体系结构上测试了它,它运行良好(arm64上的aarch64和英特尔服务器上的x86_64) 我的问题是Dockerfile中是否有一个具有可用体系结构的特殊变量(可以像参数一样使用)。我知道可以使用ARG进行设置,但这意味着它必须由调用者设置,我希望有更自动的设置 我将使用它自动下载架构的正确
root@minus:~# docker info | grep Architecture
Architecture: armv7l
我还在其他体系结构上测试了它,它运行良好(arm64上的aarch64和英特尔服务器上的x86_64)
我的问题是Dockerfile中是否有一个具有可用体系结构的特殊变量(可以像参数一样使用)。我知道可以使用ARG
进行设置,但这意味着它必须由调用者设置,我希望有更自动的设置
我将使用它自动下载架构的正确图像。我找了很多,但什么也没找到,如果有办法,我会很高兴的
提前感谢。在一些Docker官方图片中有基于架构的条件代码执行示例。例如,
golang
Dockerfiles使用包管理器报告体系结构,然后使用case
有条件地运行语句,所有这些都在run
的命令链中。发件人:
运行。。。
apkArch=“$(apk--打印拱)”\
中的案例“$apkArch”\
出口目标为6'\
x86)导出GO386='387'\
以撒\
...
在中,使用了dpkg代替apk:
dpkgArch=“$(dpkg——打印架构)”\
如果使用BuildKit进行构建,则可以使用一些预定义的参数:
- TARGETPLATFORM—构建结果的平台。例如linux/amd64、linux/arm/v7、windows/amd64
- TARGETOS-TARGETPLATFORM的操作系统组件
- TARGETRACH-TARGETPLATFORM的架构组件
- TARGETVARIANT-TARGETPLATFORM的变体组件
- BUILDPLATFORM—执行生成的节点的平台
- BUILDOS—BUILDPLATFORM的操作系统组件
- BUILDARCH—BUILDPLATFORM的操作系统组件
- BUILDVARIANT—BUILDPLATFORM的操作系统组件
export DOCKER_BUILDKIT=1
然后使用
docker build进行构建
(正在研究使用docker compose支持BuildKit,可能在下一个版本中)。我认为docker架构结构的目的是为不同的架构构建不同的docker映像,然后推送不同的映像进行分发。如果你真的想在dockerfile中处理这个问题,你可以让dockerfile运行一个脚本,你可以自己检查操作系统架构。好的,我明白你的意思,我可以使用多阶段构建:使用alpine的第一个构建可以通过运行lscpu
或其他任何东西检测拱门,然后准备第二个构建。没想到,现在就来试试。docker compose中的Thank.BuildKit支持刚刚发布: