在 M1 Mac 上构建时 Docker 失败(exec /usr/local/bin/docker-entrypoint.sh:exec 格式错误)

And*_*iga 51 docker docker-compose

我有一个遗留项目正在运行docker-compose。一年前,它是从以下配置开始的。

现在它抛出一个错误:

exec /usr/local/bin/docker-entrypoint.sh: exec format error
Run Code Online (Sandbox Code Playgroud)

我想使用 CMD 配置运行容器。我在网上发现#!/bin/bash需要添加以避免这个错误,我将其添加到Dockerfile中。

没有自定义docker-entrypoint.sh定义。据我了解,需要有一个入口点或一个命令。

CMD 的主要目的是为执行容器提供默认值。这些默认值可以包含可执行文件,也可以省略可执行文件,在这种情况下,您还必须指定 ENTRYPOINT 指令。

Dockerfile

#!/bin/bash

#nodejs
FROM node:11.15
ENV NODE_VERSION 11.15

#app directory
WORKDIR ./

#mongodb tools
RUN wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add -
RUN echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/5.0 main" | tee /etc/apt/sources.list.d/mongodb-org-5.0.list
RUN apt-get update
RUN apt-get install -y mongodb

RUN apt-get install nano

#nodejs packages
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install --ignore-scripts sharp
RUN npm install --only=production

COPY . .

RUN mkdir -p /logs/

# wait for mongoDB launch
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.5.1/wait /wait
RUN chmod +x /wait

#port of the app
EXPOSE 8080

CMD /wait && npm run dockerServer
Run Code Online (Sandbox Code Playgroud)

Docker 组合

version: "3"
services:
    watchtower:
        container_name: watchtower
        image: v2tec/watchtower
        env_file:
             - watchtower.env
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
            - /root/.docker/config.json:/config.json
        command: --interval 30
        restart: always
    mongo:
        container_name: mongo
        ports:
            - '27017:27017'
        volumes:
            - '/temp/im/docker/mongo/data:/data/db'
            - '/temp/im/docker/backup:/data/backup'
        image: mongo
        restart: always
    core:
        container_name: core
        ports:
            - '8080:8080'
        env_file:
            - core.env
        depends_on:
            - "mongo"
        volumes:
            - '/temp/im/docker/logs:/data/logs'
            - '/temp/im/docker/backup:/data/backup'
        image: index.docker.io/regname/core:beta
        logging:
            driver: "json-file"
            options:
                max-file: '5'
                max-size: '10m'
        restart: always
Run Code Online (Sandbox Code Playgroud)

编辑:我更改了标题以使其更容易被发现。

plp*_*max 130

尝试改变FROM

FROM --platform=linux/amd64 node:11.15
Run Code Online (Sandbox Code Playgroud)

有一个很好的解释

  • 这就成功了。谷歌搜索发现这是 Mac M1 芯片和构建 docker 镜像的问题。/sf/ask/4592868801/​​y-default-on-macos (2认同)

小智 13

使用以下内容构建 docker 镜像也可以。docker build --platform=linux/amd64 -t <image:tag>