如何在AWS中为Graviton2处理器使用YAML构建ARM-64 Docker映像

如何解决如何在AWS中为Graviton2处理器使用YAML构建ARM-64 Docker映像

我正在尝试使用CodePipeline构建将使用ARM-64 Graviton2处理器的docker映像。我有一个这样的自定义构建文件

#########
# Build Spec
#
# The build spec is used to build the image in code deploy. When using AWS
# CodePipeline,use this customized buildspec.
#
#########
version: 0.2
run-as: root
artifacts:
    files:
      - Dockerrun.aws.json
      - imagedeFinitions.json
phases:
  install: 
    runtime-versions:
      PHP: 7.4
  build:
    commands:
    - echo Build started on `date`
    - cp app/config/config.sample.PHP app/config/config.PHP
  post_build:
    commands:
      - echo Build completed on `date`
      - which aws
      - AWS_PASSWORD="$(aws ecr get-login-password --region us-east-1)"
      - docker build -t live -f docker/live/Dockerfile .
      - docker login -u AWS -p $AWS_PASSWORD xxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
      - docker tag live:latest xxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/live:latest
      - docker push xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/live:latest
      - mv docker/Dockerrun.aws.json Dockerrun.aws.json
      - echo Pushing the Docker image...
      - echo Writing image deFinitions file...
      - printf '[{"name":"live","imageUri":"%s"}]' xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/live:latest > imagedeFinitions.json

终于完全成功了!但是当我添加/更改

docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7

它完全失败。外观如下:

#########
# Build Spec
#
# The build spec is used to build the image in code deploy. When using AWS
# CodePipeline,use this customized buildspec.
#
#########
version: 0.2
run-as: root
artifacts:
    files:
      - Dockerrun.aws.json
      - imagedeFinitions.json
phases:
  install: 
    runtime-versions:
      PHP: 7.4
  build:
    commands:
    - echo Build started on `date`
    - cp app/config/config.sample.PHP app/config/config.PHP
  post_build:
    commands:
      - echo Build completed on `date`
      - which aws
      - AWS_PASSWORD="$(aws ecr get-login-password --region us-east-1)"
      - docker buildx build --platform linux/amd64,linux/arm/v7 -t live -f docker/live/Dockerfile .
      - docker login -u AWS -p $AWS_PASSWORD xxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
      - docker tag live:latest xxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/live:latest
      - docker push xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/live:latest
      - mv docker/Dockerrun.aws.json Dockerrun.aws.json
      - echo Pushing the Docker image...
      - echo Writing image deFinitions file...
      - printf '[{"name":"live","imageUri":"%s"}]' xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/live:latest > imagedeFinitions.json

失败错误消息是:

[Container] 2020/11/09 00:19:02 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker buildx build --platform linux/amd64,linux/arm/v7 -t live -f docker/live/Dockerfile .. Reason: exit status 125

要使dockerx工作,我在做错什么?

解决方法

看起来 buildx 未安装或未启用。您必须在守护程序和 cli 中启用实验性功能。文档说它与 19.03 捆绑在一起,但显然 some distributions don't include it 并且它仍然需要安装。我无法在文档中找到以下信息,我不得不通过搜索和反复试验将其拼凑起来。

我在 this issue 中找到的对我有用的步骤:

wget https://github.com/docker/buildx/releases/download/v0.5.1/buildx-v0.5.1.linux-amd64
chmod a+x buildx-v0.5.1.linux-amd64
mkdir -p ~/.docker/cli-plugins
mv buildx-v0.5.1.linux-amd64 ~/.docker/cli-plugins/docker-buildx
cat <<EOF >~/.docker/config.json
{
    "experimental": "enabled"
}
EOF
cat <<EOF | sudo tee /etc/docker/daemon.json
{
    "experimental": true
}
EOF
sudo systemctl restart docker
docker buildx create --use

注意事项:

  • 当你们中的许多人阅读本文时,可能会有更新的版本发布。检查 release on GitHub
  • 该代码段将覆盖 /etc/docker/daemon.json~/.docker/config.json 中的任何现有内容。您可能需要检查这些文件是否已经存在。

我对 CodePipelines 不熟悉,但我希望这些步骤或一些衍生工具能够帮助您摆脱困境。

为了测试这一点,我从全新的 Ubuntu 20.04 安装中运行了以下命令:

sudo apt update
sudo apt install -y docker.io
sudo usermod -a -G docker ubuntu
logout

再次登录并运行上面代码片段中的命令。

cat <<EOF >Dockerfile
FROM ubuntu
RUN arch && sleep 10
EOF
docker buildx build --platform linux/arm64,linux/amd64  .
ubuntu@ip-172-31-94-5:~$ docker buildx build --platform linux/arm64,linux/amd64  .
WARN[0000] No output specified for docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
[+] Building 5.9s (6/8)
 => [internal] load build definition from Dockerfile                                                                                                   0.0s
 => => transferring dockerfile: 70B                                                                                                                    0.0s
 => [internal] load .dockerignore                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                        0.0s
 => [linux/amd64 internal] load metadata for docker.io/library/ubuntu:latest                                                                           1.9s
 => [linux/arm64 internal] load metadata for docker.io/library/ubuntu:latest                                                                           1.2s
 => [linux/amd64 1/2] FROM docker.io/library/ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c                            1.0s
 => => resolve docker.io/library/ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c                                        0.0s
 => => sha256:2c2d948710f21ad82dce71743b1654b45acb5c059cf5c19da491582cef6f2601 162B / 162B                                                             0.0s
 => => sha256:14428a6d4bcdba49a64127900a0691fb00a3f329aced25eb77e3b65646638f8d 847B / 847B                                                             0.1s
 => => sha256:da7391352a9bb76b292a568c066aa4c3cbae8d494e6a3c68e3c596d34f7c75f8 28.56MB / 28.56MB                                                       0.3s
 => => extracting sha256:da7391352a9bb76b292a568c066aa4c3cbae8d494e6a3c68e3c596d34f7c75f8                                                              0.6s
 => => extracting sha256:14428a6d4bcdba49a64127900a0691fb00a3f329aced25eb77e3b65646638f8d                                                              0.0s
 => => extracting sha256:2c2d948710f21ad82dce71743b1654b45acb5c059cf5c19da491582cef6f2601                                                              0.0s
 => [linux/arm64 1/2] FROM docker.io/library/ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c                            1.0s
 => => resolve docker.io/library/ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c                                        0.0s
 => => sha256:e9c66f1fb5a2d6587841797a3b0d4c2d0fd0b7ccd867e55a1314cee2e90ad47d 848B / 848B                                                             0.0s
 => => sha256:94362ba2c285844f83a1b1e2dac5217b0426427f8bb809af534b5f4d751e298c 188B / 188B                                                             0.1s
 => => sha256:a970164f39c1a46f71b3615bc9d5b6710832766b530d9179db8e36563f705abb 27.17MB / 27.17MB                                                       0.4s
 => => extracting sha256:a970164f39c1a46f71b3615bc9d5b6710832766b530d9179db8e36563f705abb                                                              0.5s
 => => extracting sha256:e9c66f1fb5a2d6587841797a3b0d4c2d0fd0b7ccd867e55a1314cee2e90ad47d                                                              0.0s
 => => extracting sha256:94362ba2c285844f83a1b1e2dac5217b0426427f8bb809af534b5f4d751e298c                                                              0.0s
 => [linux/amd64 2/2] RUN arch && sleep 10                                                                                                             2.8s
 => => # x86_64
 => [linux/arm64 2/2] RUN arch && sleep 10                                                                                                             2.7s
 => => # aarch64

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?