When trying to run docker container on ARM, you will see an error like this one:
taiga-* The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
To solve this problem, you can use virtualization to emulate amd64.
Using virtualization can cause performance degradation, so make sure your server is sufficiently performant.
I’m using debian12 for an example to host a Taiga.
- Install QEMU and binfmt_misc
sudo apt update sudo apt install qemu-system qemu-user-static binfmt-support
- Configure binfmt_misc to support AMD64 emulation
This step will install the necessary binfiles and configure the system to emulate different architectures.docker run --rm --privileged tonistiigi/binfmt --install all
- Restart Docker
sudo systemctl restart docker
- Modify the docker-compose.yml file
For correct operation you need to add to services that require amd64 the line:
Your docker-compose.yml might look like this:platform: linux/amd64
version: "3.5" x-environment: &default-back-environment # These environment variables will be used by taiga-back and taiga-async. # Database settings POSTGRES_DB: "taiga" POSTGRES_USER: "${POSTGRES_USER}" POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}" POSTGRES_HOST: "taiga-db" # Taiga settings TAIGA_SECRET_KEY: "${SECRET_KEY}" TAIGA_SITES_SCHEME: "${TAIGA_SCHEME}" TAIGA_SITES_DOMAIN: "${TAIGA_DOMAIN}" TAIGA_SUBPATH: "${SUBPATH}" # Email settings. EMAIL_BACKEND: "django.core.mail.backends.${EMAIL_BACKEND}.EmailBackend" DEFAULT_FROM_EMAIL: "${EMAIL_DEFAULT_FROM}" EMAIL_USE_TLS: "${EMAIL_USE_TLS}" EMAIL_USE_SSL: "${EMAIL_USE_SSL}" EMAIL_HOST: "${EMAIL_HOST}" EMAIL_PORT: "${EMAIL_PORT}" EMAIL_HOST_USER: "${EMAIL_HOST_USER}" EMAIL_HOST_PASSWORD: "${EMAIL_HOST_PASSWORD}" # Rabbitmq settings RABBITMQ_USER: "${RABBITMQ_USER}" RABBITMQ_PASS: "${RABBITMQ_PASS}" # Telemetry settings ENABLE_TELEMETRY: "${ENABLE_TELEMETRY}" # ...your customizations go here x-volumes: &default-back-volumes # These volumens will be used by taiga-back and taiga-async. - taiga-static-data:/taiga-back/static - taiga-media-data:/taiga-back/media # - ./config.py:/taiga-back/settings/config.py services: taiga-db: image: postgres:12.3 platform: linux/amd64 environment: POSTGRES_DB: "taiga" POSTGRES_USER: "${POSTGRES_USER}" POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 2s timeout: 15s retries: 5 start_period: 3s volumes: - taiga-db-data:/var/lib/postgresql/data networks: - taiga taiga-back: image: taigaio/taiga-back:latest platform: linux/amd64 environment: *default-back-environment volumes: *default-back-volumes networks: - taiga depends_on: taiga-db: condition: service_healthy taiga-events-rabbitmq: condition: service_started taiga-async-rabbitmq: condition: service_started taiga-async: image: taigaio/taiga-back:latest platform: linux/amd64 entrypoint: ["/taiga-back/docker/async_entrypoint.sh"] environment: *default-back-environment volumes: *default-back-volumes networks: - taiga depends_on: taiga-db: condition: service_healthy taiga-events-rabbitmq: condition: service_started taiga-async-rabbitmq: condition: service_started taiga-async-rabbitmq: image: rabbitmq:3.8-management-alpine platform: linux/amd64 environment: RABBITMQ_ERLANG_COOKIE: "${RABBITMQ_ERLANG_COOKIE}" RABBITMQ_DEFAULT_USER: "${RABBITMQ_USER}" RABBITMQ_DEFAULT_PASS: "${RABBITMQ_PASS}" RABBITMQ_DEFAULT_VHOST: "${RABBITMQ_VHOST}" hostname: "taiga-async-rabbitmq" volumes: - taiga-async-rabbitmq-data:/var/lib/rabbitmq networks: - taiga taiga-front: image: taigaio/taiga-front:latest platform: linux/amd64 environment: TAIGA_URL: "${TAIGA_SCHEME}://${TAIGA_DOMAIN}" TAIGA_WEBSOCKETS_URL: "${WEBSOCKETS_SCHEME}://${TAIGA_DOMAIN}" TAIGA_SUBPATH: "${SUBPATH}" # ...your customizations go here networks: - taiga # volumes: # - ./conf.json:/usr/share/nginx/html/conf.json taiga-events: image: taigaio/taiga-events:latest platform: linux/amd64 environment: RABBITMQ_USER: "${RABBITMQ_USER}" RABBITMQ_PASS: "${RABBITMQ_PASS}" TAIGA_SECRET_KEY: "${SECRET_KEY}" networks: - taiga depends_on: taiga-events-rabbitmq: condition: service_started taiga-events-rabbitmq: image: rabbitmq:3.8-management-alpine platform: linux/amd64 environment: RABBITMQ_ERLANG_COOKIE: "${RABBITMQ_ERLANG_COOKIE}" RABBITMQ_DEFAULT_USER: "${RABBITMQ_USER}" RABBITMQ_DEFAULT_PASS: "${RABBITMQ_PASS}" RABBITMQ_DEFAULT_VHOST: "${RABBITMQ_VHOST}" hostname: "taiga-events-rabbitmq" volumes: - taiga-events-rabbitmq-data:/var/lib/rabbitmq networks: - taiga taiga-protected: image: taigaio/taiga-protected:latest platform: linux/amd64 environment: MAX_AGE: "${ATTACHMENTS_MAX_AGE}" SECRET_KEY: "${SECRET_KEY}" networks: - taiga taiga-gateway: image: nginx:1.19-alpine platform: linux/amd64 ports: - "9000:80" volumes: - ./taiga-gateway/taiga.conf:/etc/nginx/conf.d/default.conf - taiga-static-data:/taiga/static - taiga-media-data:/taiga/media networks: - taiga depends_on: - taiga-front - taiga-back - taiga-events volumes: taiga-static-data: taiga-media-data: taiga-db-data: taiga-async-rabbitmq-data: taiga-events-rabbitmq-data: networks: taiga:
- Start Taiga
ordocker compose up -d
./launch-taiga.sh