Gre*_*reg 6 node.js npm docker gitlab-ci buildx
我没有使用buildx太多,无法弄清楚这里发生了什么。当我在我的 intel Mac 上运行buildx构建时,arm64 的一切构建都很好,但是当我让 GitLab 运行程序在 amd64 服务器上进行构建时,它会失败。
[builder 4/6] RUN which node
0.514 /usr/local/bin/node
DONE 0.6s
[builder 5/6] RUN node -v
0.633 v16.13.0
DONE 0.7s
[builder 6/6] RUN npm install
0.360 Error while loading /usr/local/sbin/node: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我看到 npm 正在寻找错误的位置,但为什么它在 GitLab 运行程序上寻找/usr/local/sbin/node,但在我的 Mac 上却在正确的路径中寻找?如果我只是运行的话,这个 Dockerfile 构建得很好。
$ docker build .
Run Code Online (Sandbox Code Playgroud)
本地命令:
$ docker buildx create --use
$ docker buildx build --platform linux/arm64 .
Run Code Online (Sandbox Code Playgroud)
GitLab Runner 构建环境
$ docker buildx create --platform linux/amd64,linux/arm64 --use
epic_wright
$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS
epic_wright * docker-container
epic_wright0 tcp://localhost:2375 inactive linux/amd64*, linux/arm64*
default docker
default default running linux/amd64, linux/386
Run Code Online (Sandbox Code Playgroud)
Dockerfile
FROM node:16.13.0-bullseye
ARG GITLAB_AUTH_TOKEN
COPY ./app /app
WORKDIR /app
RUN which node
RUN node -v
RUN npm install
Run Code Online (Sandbox Code Playgroud)
.gitlab-ci.yml
image: eventngine/docker-buildx
stages:
- build
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
DOCKER_HOST: tcp://localhost:2375
build:
stage: build
services:
- name: docker:19.03.12-dind
command: ["--experimental"]
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker buildx create --use
- docker buildx build -t "$CI_REGISTRY_IMAGE:v${CI_COMMIT_SHA:0:8}" --build-arg GITLAB_AUTH_TOKEN=$CI_JOB_TOKEN --platform linux/arm64 --push .
only:
- main
Run Code Online (Sandbox Code Playgroud)
将不胜感激任何想法,非常感谢!
小智 5
当在 buildx 构建期间遇到类似的问题时npm install,我能够解决
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
之后,我在我npm install尝试构建的所有架构上都运行得很好。
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |