在使用容器时出现错误的原因可能有很多:
- 使用错误的脚本头,例如在其中添加空格。
- 在编写脚本时使用不兼容的字符编码
- 不匹配的 CPU 架构
- 缺少文件权限
以下是使用示例演示第三个原因:
rohits-MacBook> catalog % docker version
我的笔记本电脑是 darwin/arm64 架构,并安装了相同的 Docker 引擎。
Client:
Cloud integration: v1.0.31
Version: 20.10.23
API version: 1.41
Go version: go1.18.10
Git commit: 7155243
Built: Thu Jan 19 17:35:19 2023
OS/Arch: darwin/arm64
Context: desktop-linux
Experimental: true
Server: Docker Desktop 4.17.0 (99724)
Engine:
Version: 20.10.23
API version: 1.41 (minimum version 1.12)
Go version: go1.18.10
Git commit: 6051f14
Built: Thu Jan 19 17:31:28 2023
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.18
GitCommit: 2456e983eb9e37e47538f59ea18f2043c9a73640
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
#################################################
在我的当前笔记本上执行
rohits-MacBook> catalog % make image
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-X github.ibm.com/cloud-sre/version.Major= -X github.ibm.com/cloud-sre/version.Minor= -X github.ibm.com/cloud-sre/version.Build= -X github.ibm.com/cloud-sre/version.Timestamp=202303170049" -o osscatimporter ./cmd/osscatimporter
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-X github.ibm.com/cloud-sre/version.Major= -X github.ibm.com/cloud-sre/version.Minor= -X github.ibm.com/cloud-sre/version.Build= -X github.ibm.com/cloud-sre/version.Timestamp=202303170049" -o osscatpublisher ./cmd/osscatpublisher
jq: error: Could not open file metadata.json: No such file or directory
docker buildx build --platform=linux/amd64 -t api-osscatalog:latest .
[+] Building 153.2s (11/11) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 560B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker-virtual.artifactory.swg-devops.com/ubi8/ubi-minimal:8.7 34.2s
=> [auth] ubi8/ubi-minimal:pull token for docker-virtual.artifactory.swg-devops.com 0.0s
=> [1/5] FROM docker-virtual.artifactory.swg-devops.com/ubi8/ubi-minimal:8.7@sha256:65a240ad8bd3f2fff3e18a22ebadc40da0b145616231fc1e1625 91.3s
=> => resolve docker-virtual.artifactory.swg-devops.com/ubi8/ubi-minimal:8.7@sha256:65a240ad8bd3f2fff3e18a22ebadc40da0b145616231fc1e16251 0.0s
=> => sha256:0214a28336e387c66493c61bb394e86a18f3bea8dbc46de74a26f173ff553c89 429B / 429B 0.0s
=> => sha256:591670a5d6a620931ec51c1e7436300894f5320e76e9737f0366fc62114addd4 6.23kB / 6.23kB 0.0s
=> => sha256:d7c06497d5cebd39c0a4feb14981ec940b5c863e49903d320f630805b049cbff 39.28MB / 39.28MB 90.8s
=> => sha256:65a240ad8bd3f2fff3e18a22ebadc40da0b145616231fc1e16251f3c6dee087a 1.47kB / 1.47kB 0.0s
=> => extracting sha256:d7c06497d5cebd39c0a4feb14981ec940b5c863e49903d320f630805b049cbff 0.4s
=> [internal] load build context 0.2s
=> => transferring context: 23.77MB 0.2s
=> [2/5] RUN microdnf update && microdnf install procps
=> [3/5] COPY osscatimporter / 0.0s
=> [4/5] COPY mailtemplate.tmpl / 0.0s
=> [5/5] COPY osscatpublisher / 0.0s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:8af2a24809c709c2ea80b1f3ed0c0d1dc1381c84219e0e779be43ab8542e8c0d 0.0s
=> => naming to docker.io/library/api-osscatalog:latest 0.0s
##############################
rohits-MacBook> catalog % docker images
罗希特的MacBook>目录%docker镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
api-catalog latest 8af2a24809c7 9 seconds ago 140MB
######################################
rohits-MacBook> osscatalog%docker image inspect api-catalog
罗希特的MacBook> osscatalog%docker镜像检查api目录
"Architecture": "arm64",
"Os": "linux",
"Size": 148693891,
"VirtualSize": 148693891,
生成一个 arm64
镜像
########################################
运行实例后出现的问题,其日志文件显示如下:
rohits-MacBook> api-osscatalog % kubectl -n api logs -f catimporter-rohit-gst45
exec /bin/sh: exec format error
rohits-MacBook> api-catalog %
评论:
这种情况通常发生在你正在使用ARM架构的系统上开发项目,比如新的Apple M系列芯片。当你将代码推送到使用x86系统的生产环境时,就会出现“exec user process caused:exec format error”的错误。这是因为每个代码在转换为低级指令时,在ARM和x86上都不同。Docker将Apple M1 Pro平台检测为“linux/arm64/v8”。
################## 解决方案 ########################
1.
/cloud-sre/catalog/Makefile
更改:
docker build -t $(IMAGE_NAME):latest .
为:
docker buildx build --platform=linux/amd64 -t $(IMAGE_NAME):latest .
- 但是要使上述方法生效,还需要更改Dockerfile
/cloud-sre/catalog/Dockerfile
更改:
FROM docker-virtual.artifactory.swg-devops.com/ubi8/ubi-minimal:8.7
为:
FROM --platform=linux/amd64 docker-virtual.artifactory.swg-devops.com/ubi8/ubi-minimal:8.7
#################### 测试 ######################
rohits-MacBook> catalog % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
删除了所有图片
#####################################
rohits-MacBook> catalog %
rohits-MacBook> catalog % make image
罗希特的MacBook>目录%
罗希特的MacBook>目录%制作图像
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-X github.ibm.com/cloud-sre/version.Major= -X github.ibm.com/cloud-sre/version.Minor= -X github.ibm.com/cloud-sre/version.Build= -X github.ibm.com/cloud-sre/version.Timestamp=202303170049" -o osscatimporter ./cmd/osscatimporter
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-X github.ibm.com/cloud-sre/version.Major= -X github.ibm.com/cloud-sre/version.Minor= -X github.ibm.com/cloud-sre/version.Build= -X github.ibm.com/cloud-sre/version.Timestamp=202303170049" -o osscatpublisher ./cmd/osscatpublisher
jq: error: Could not open file metadata.json: No such file or directory
docker buildx build --platform=linux/amd64 -t api-osscatalog:latest .
[+] Building 153.2s (11/11) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 560B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker-virtual.artifactory.swg-devops.com/ubi8/ubi-minimal:8.7 34.2s
=> [auth] ubi8/ubi-minimal:pull token for docker-virtual.artifactory.swg-devops.com 0.0s
=> [1/5] FROM docker-virtual.artifactory.swg-devops.com/ubi8/ubi-minimal:8.7@sha256:65a240ad8bd3f2fff3e18a22ebadc40da0b145616231fc1e1625 91.3s
=> => resolve docker-virtual.artifactory.swg-devops.com/ubi8/ubi-minimal:8.7@sha256:65a240ad8bd3f2fff3e18a22ebadc40da0b145616231fc1e16251 0.0s
=> => sha256:0214a28336e387c66493c61bb394e86a18f3bea8dbc46de74a26f173ff553c89 429B / 429B 0.0s
=> => sha256:591670a5d6a620931ec51c1e7436300894f5320e76e9737f0366fc62114addd4 6.23kB / 6.23kB 0.0s
=> => sha256:d7c06497d5cebd39c0a4feb14981ec940b5c863e49903d320f630805b049cbff 39.28MB / 39.28MB 90.8s
=> => sha256:65a240ad8bd3f2fff3e18a22ebadc40da0b145616231fc1e16251f3c6dee087a 1.47kB / 1.47kB 0.0s
=> => extracting sha256:d7c06497d5cebd39c0a4feb14981ec940b5c863e49903d320f630805b049cbff 0.4s
=> [internal] load build context 0.2s
=> => transferring context: 23.77MB 0.2s
=> [2/5] RUN microdnf update && microdnf install procps
=> [3/5] COPY osscatimporter / 0.0s
=> [4/5] COPY mailtemplate.tmpl / 0.0s
=> [5/5] COPY osscatpublisher / 0.0s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:8af2a24809c709c2ea80b1f3ed0c0d1dc1381c84219e0e779be43ab8542e8c0d 0.0s
=> => naming to docker.io/library/api-osscatalog:latest 0.0s
##############################################
rohits-MacBook> catalog % docker images
罗希特的MacBook>目录%docker镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
api-catalog latest 8af2a24809c7 9 seconds ago 140MB
################################################
rohits-MacBook> catalog % docker image inspect api-catalog:latest
################################################
rohits-MacBook>目录%docker image inspect api-catalog:latest
"Architecture": "amd64",
"Os": "linux",
"Size": 140425582,
这是我以前的笔记本电脑经常使用的。
############################################
现在正在检查新实例的日志:
rohits-MacBook> api-ocatalog % kubectl -n api logs -f catimporter-rohit-9bzk9
INFO 19:53:29 osscatimporter Version: .. - 202303170049
INFO 19:53:29 sending *osscatimporter* Starting Run osscatimporter using the slack-webhook-url Slack webhook key.
Test COS connection passed: oss-rmc-data-test
Test COS connection passed: oss-rmc-emergency-test
AUDIT 19:53:30 Operating in read-only mode on all services and components found from all sources (with visibility=private and above)
INFO 19:53:30 Forcing -check-owner=true
INFO 19:53:30 Optional run action ENABLED: Services
INFO 19:53:30 Optional run action ENABLED: Tribes
INFO 19:53:30 Optional run action ENABLED: Environments
INFO 19:53:30 Optional run action ENABLED: Deployments
INFO 19:53:30 Optional run action ENABLED: Monitoring
INFO 19:53:30 Optional run action ENABLED: RMC
INFO 19:53:30 Optional run action ENABLED: RMC-Rescan
INFO 19:53:30 Optional run action DISABLED: Environments-Native
INFO 19:53:30 Optional run action DISABLED: ProductInfo-Parts
INFO 19:53:30 Optional run action DISABLED: ProductInfo-Parts-Refresh
INFO 19:53:30 Optional run action DISABLED: ProductInfo-ClearingHouse
INFO 19:53:30 Optional run action DISABLED: Dependencies-ClearingHouse
INFO 19:53:30 Optional run action DISABLED: ScorecardV1
INFO 19:53:30 Optional run action DISABLED: Doctor
INFO 19:53:30 Skip reloading Segment and Tribe Info from ScorecardV1
没有错误