Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在docker文件中获得docker引擎的体系结构?_Docker_Dockerfile - Fatal编程技术网

是否可以在docker文件中获得docker引擎的体系结构?

是否可以在docker文件中获得docker引擎的体系结构?,docker,dockerfile,Docker,Dockerfile,我知道只需运行以下命令就可以获得Docker引擎的架构: root@minus:~# docker info | grep Architecture Architecture: armv7l 我还在其他体系结构上测试了它,它运行良好(arm64上的aarch64和英特尔服务器上的x86_64) 我的问题是Dockerfile中是否有一个具有可用体系结构的特殊变量(可以像参数一样使用)。我知道可以使用ARG进行设置,但这意味着它必须由调用者设置,我希望有更自动的设置 我将使用它自动下载架构的正确

我知道只需运行以下命令就可以获得Docker引擎的架构:

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的操作系统组件
这些记录在中的“全球范围内的自动平台参数”中

要使用BuildKit,可以在shell中通过变量启用它:

export DOCKER_BUILDKIT=1

然后使用
docker build进行构建
(正在研究使用docker compose支持BuildKit,可能在下一个版本中)。

我认为docker架构结构的目的是为不同的架构构建不同的docker映像,然后推送不同的映像进行分发。如果你真的想在dockerfile中处理这个问题,你可以让dockerfile运行一个脚本,你可以自己检查操作系统架构。好的,我明白你的意思,我可以使用多阶段构建:使用alpine的第一个构建可以通过运行
lscpu
或其他任何东西检测拱门,然后准备第二个构建。没想到,现在就来试试。docker compose中的Thank.BuildKit支持刚刚发布: