Docker installation - v15.21.0 - Markdown & HTML editors do not appear anymore

Dears,

Bug description

I encounter an issue on my frappe installation: since I upgraded to v15, I don’t see any of the markdown editors fields

For example, when I try to create a Newletter, I cannot edit the message if the editor is HTML of Markdown (that should appear in the yellow)

In the JS console, I get this message: Uncaught SyntaxError: expected expression, got '<'

Environment description

I deployed this instance thanks to docker-compose. For debug purposes, I installed a fresh frappe instance without any plugin.

Frappe version: v15.21.0

Here is my Dockerfile:

FROM frappe/erpnext:v15.19.2
USER root
WORKDIR /home/frappe/frappe-bench/apps/frappe/
RUN chown -R frappe:frappe /home/frappe/frappe-bench/sites/*
RUN chown -R frappe:frappe /home/frappe/frappe-bench/apps/frappe/frappe/public
WORKDIR /home/frappe/frappe-bench/sites
USER frappe
RUN bench build

Here is the script that I use to initialize the site:

#!/bin/bash

SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"

cd ${SCRIPTPATH}

export $(cat ${SCRIPTPATH}/.env | grep FRAPPE_SITE_NAME_HEADER)
export $(cat ${SCRIPTPATH}/.env | grep DB_PASSWORD)

ADMIN_PASSWORD=$(echo $RANDOM | md5sum | head -c 20; echo;)
echo ${ADMIN_PASSWORD} > ${SCRIPTPATH}/.site_admin_password

docker compose exec backend bench set-config -g root_login postgres
docker compose exec backend bench set-config -g root_password ${DB_PASSWORD}

docker compose exec backend bench new-site ${FRAPPE_SITE_NAME_HEADER}  --db-type postgres --admin-password ${ADMIN_PASSWORD}

docker compose exec backend bench --site ${FRAPPE_SITE_NAME_HEADER} build
docker compose exec backend ln -s /home/frappe/frappe-bench/apps/frappe/frappe/public/icons/ /home/frappe/frappe-bench/sites/assets/frappe/icons
docker compose exec backend ln -s /home/frappe/frappe-bench/apps/frappe/frappe/public/css/ /home/frappe/frappe-bench/sites/assets/frappe/css
docker compose exec backend ln -s /home/frappe/frappe-bench/apps/frappe/frappe/public/images/ /home/frappe/frappe-bench/sites/assets/frappe/images
docker compose exec backend ln -s /home/frappe/frappe-bench/apps/frappe/frappe/public/sounds/ /home/frappe/frappe-bench/sites/assets/frappe/sound

Here is my compose.main.yaml file that I use to generate my docker-compose.yml:

x-depends-on-configurator: &depends_on_configurator
  depends_on:
    configurator:
      condition: service_completed_successfully

x-backend-defaults: &backend_defaults
  <<: *depends_on_configurator
  #image: frappe/frappe-worker:${FRAPPE_VERSION:?No Frappe version set}
  build:
    context: ./dockerfile-worker
    dockerfile: Dockerfile
    args:
      - ARG_FRAPPE_VERSION=${FRAPPE_VERSION:?No Frappe version set}
  volumes:
    - sites:/home/frappe/frappe-bench/sites
    - apps_frappe:/home/frappe/frappe-bench/apps/frappe

services:
  configurator:
    <<: *backend_defaults
    restart: "no"
    environment:
      DB_HOST: ${DB_HOST}
      DB_PORT: ${DB_PORT}
      REDIS_CACHE: ${REDIS_CACHE}
      REDIS_QUEUE: ${REDIS_QUEUE}
      REDIS_SOCKETIO: ${REDIS_SOCKETIO}
      SOCKETIO_PORT: 9000
    depends_on: {}
    entrypoint:
      - bash
      - -c
    command:
      - >
        bench set-config -g db_host $$DB_HOST;
        bench set-config -gp db_port $$DB_PORT;
        bench set-config -g redis_cache "redis://$$REDIS_CACHE";
        bench set-config -g redis_queue "redis://$$REDIS_QUEUE";
        bench set-config -g redis_socketio "redis://$$REDIS_SOCKETIO";
        bench set-config -gp socketio_port $$SOCKETIO_PORT;

  backend:
    <<: *backend_defaults
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - assets:/home/frappe/frappe-bench/sites/assets
      - apps_frappe:/home/frappe/frappe-bench/apps/frappe
    expose:
      - 8000

  frontend:
    image: frappe/erpnext:${FRAPPE_VERSION}
    environment:
      BACKEND: backend:8000
      SOCKETIO: websocket:9000
      FRAPPE_SITE_NAME_HEADER: ${FRAPPE_SITE_NAME_HEADER:-$$host}
      UPSTREAM_REAL_IP_ADDRESS: ${UPSTREAM_REAL_IP_ADDRESS:-127.0.0.1}
      UPSTREAM_REAL_IP_HEADER: ${UPSTREAM_REAL_IP_HEADER:-X-Forwarded-For}
      UPSTREAM_REAL_IP_RECURSIVE: ${UPSTREAM_REAL_IP_RECURSIVE:-off}
    volumes:
      #- sites:/usr/share/nginx/html/sites
      #- assets:/usr/share/nginx/html/assets
      - sites:/home/frappe/frappe-bench/sites
      - assets:/home/frappe/frappe-bench/sites/assets
      - apps_frappe:/home/frappe/frappe-bench/apps/frappe
    depends_on:
      - backend
      - websocket
    command:
      - nginx-entrypoint.sh

  websocket:
    <<: *depends_on_configurator
    image: frappe/erpnext:${FRAPPE_VERSION}
    volumes:
      - sites:/home/frappe/frappe-bench/sites
    command:
      - node
      - /home/frappe/frappe-bench/apps/frappe/socketio.js

  queue-short:
    <<: *backend_defaults
    command: bench worker --queue short
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - assets:/home/frappe/frappe-bench/sites/assets
      - apps_nextoplait:/home/frappe/frappe-bench/apps/nextoplait

  queue-default-1:
    <<: *backend_defaults
    command: bench worker --queue default
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - assets:/home/frappe/frappe-bench/sites/assets
      - apps_nextoplait:/home/frappe/frappe-bench/apps/nextoplait

  queue-default-2:
    <<: *backend_defaults
    command: bench worker --queue default
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - assets:/home/frappe/frappe-bench/sites/assets
      - apps_nextoplait:/home/frappe/frappe-bench/apps/nextoplait

  queue-long:
    <<: *backend_defaults
    command: bench worker --queue long
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - assets:/home/frappe/frappe-bench/sites/assets
      - apps_nextoplait:/home/frappe/frappe-bench/apps/nextoplait

  scheduler:
    <<: *backend_defaults
    command: bench schedule
    volumes:
      - sites:/home/frappe/frappe-bench/sites
      - assets:/home/frappe/frappe-bench/sites/assets
      - apps_nextoplait:/home/frappe/frappe-bench/apps/nextoplait

# ERPNext requires local assets access (Frappe does not)
volumes:
  sites:
  assets:
  apps_frappe:

networks:
  default:
    name: br0
    external: true

Do someone would have any idea of the source of the issue ? Is it a bug ? Is it just me ?

Best regards !