【问题标题】:Docker Fails When Building on M1 Macs (exec /usr/local/bin/docker-entrypoint.sh: exec format error)在 M1 Mac 上构建时 Docker 失败(exec /usr/local/bin/docker-entrypoint.sh: exec 格式错误)
【发布时间】:2022-08-18 20:18:38
【问题描述】:

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

现在它抛出一个错误:

exec /usr/local/bin/docker-entrypoint.sh: exec format error

我想使用 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

码头工人撰写

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

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

  • 你的主机是什么 CPU 架构;你在 M1 Mac 上吗?看起来您正在从 GitHub 存储库下载和安装 Rust 二进制文件,它是否有任何您缺少的共享库依赖项?你能docker-compose run core sh 在一个新容器中获得一个调试外壳并四处寻找(如果你不能这样做,它会提供信息)?
  • (我建议在这里使用 CMD 而不是 ENTRYPOINT 更可取,部分原因是它使 docker-compose run 行直截了当。\"shebang\" 行在这里不会有所作为,而且是不正确的;它只会做如果您尝试直接将./Dockerfile 作为命令运行,并且 Dockerfile 不是 shell 脚本。)

标签: docker docker-compose


【解决方案1】:

尝试更改FROM

FROM --platform=linux/amd64 node:11.15

【讨论】:

猜你喜欢
  • 2022-11-03
  • 2019-12-08
  • 2022-12-30
  • 2022-07-09
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
相关资源
最近更新 更多