CSML-by-Clevy / csml-engine

CSML is an easy-to-use chatbot programming language and framework.
https://csml.dev
Apache License 2.0
715 stars 62 forks source link

Docker image not working on linux/amd64 #437

Open jeremiemartel opened 1 year ago

jeremiemartel commented 1 year ago

Describe the bug Cannot run a container using image from docker hub on linux/amd64 platform.

To Reproduce docker run --rm clevy/csml-engine:latest

exec /bin/sh: exec format error

Expected behavior Supposed to launch csml engine.

Additional context It looks like you are copying compiled binaries in Dockerfile instead of building it inside docker image, and you copied arm binary and not amd version.

image

703lovelost commented 3 months ago

@jeremiemartel Probably any updates on this? I'm having the same issue, no idea what to do next.

jeremiemartel commented 3 months ago

Hi, I had no answer, project seems to be dead, the solution I used (probably not the best) is to build my own docker image with pre compiled binaries, and add a script to select binary to execute depending on architecture.

My File architecture: | Dockerfile | pre_build.sh | src | | choose_server.sh | | bin | | | csml-server-linux-aarch64 | | | csml-server-linux-amd64

Dockerfile

FROM --platform=$TARGETPLATFORM ubuntu:22.04
ARG TARGETPLATFORM

WORKDIR /usr/src/csml

RUN apt update && apt install -y wget ca-certificates libpq-dev entr python3-minimal python3.10-venv && apt clean
RUN update-ca-certificates

# install csml server
COPY ./tmp/bin ./bin
COPY ./tmp/choose_server.sh .
RUN bash ./choose_server.sh && rm ./choose_server.sh
RUN chmod 755 server

ENTRYPOINT ["./server"]

pre_build.sh

#!/bin/bash

set -e
cd $(dirname $0)

mkdir -p tmp tmp/bin

cp ./src/choose_server.sh ./tmp
cp ./src/bin/csml-server-linux-aarch64  ./src/bin/csml-server-linux-amd64 tmp/bin

choose_server.sh

#!/bin/bash

set -e

if [ "$TARGETPLATFORM" == "linux/amd64" ] ; then
  mv ./bin/csml-server-linux-amd64 server
  rm -rf bin
elif [ "$TARGETPLATFORM" == "linux/arm64" ] ; then
  mv ./bin/csml-server-linux-aarch64 server
  rm -rf bin
else
  echo "Invalid target platform: $TARGETPLATFORM"
  exit 1
fi

Hope this can help.