Enketo forms not loading

1. What is the issue? Please be detailed.
Enketo forms not loading.

System info says I have used 94% of the 24GB disk space.
Unable to find image 'enketo/enketo-express:latest' locally
latest: Pulling from enketo/enketo-express
fd674058ff8f: Already exists
015d8e3eaced: Already exists
33f2159cab19: Already exists
81f234642412: Already exists
9aab52a260ac: Already exists
75f52d755ba3: Pull complete
157e51db28b7: Pull complete
88534c623ee3: Pull complete
709d36b27abe: Extracting [==================================================>] 627.8MB/627.8MB
docker: failed to register layer: write /root/.cache/puppeteer/chrome/linux-133.0.6943.126/chrome-linux64/chrome: no space left on device

Can i increase the disk space?
2. What steps can we take to reproduce this issue?
Not sure

3. What have you tried to fix the issue?
cleared the cache and other logs to create space on the disk. As the below log shows that the issue might be disk space.

4. Upload any forms or screenshots you can share publicly below.
Unable to find image 'enketo/enketo-express:latest' locally
latest: Pulling from enketo/enketo-express
fd674058ff8f: Already exists
015d8e3eaced: Already exists
33f2159cab19: Already exists
81f234642412: Already exists
9aab52a260ac: Already exists
75f52d755ba3: Pull complete
157e51db28b7: Pull complete
88534c623ee3: Pull complete
709d36b27abe: Extracting [==================================================>] 627.8MB/627.8MB
docker: failed to register layer: write /root/.cache/puppeteer/chrome/linux-133.0.6943.126/chrome-linux64/chrome: no space left on device

That means you only have 1.5GB left. That's not enough to safely run most applications. Increase your disk space or free up some space.

Hi @yanokwa , i increased the disk space, and now the enketo log shows:

sudo docker logs central-enketo-1
generating enketo configuration...
starting enketo...
yarn workspace v1.22.22
yarn run v1.22.22
$ node .
Worker 3 ready for duty at port 8005! (environment: production)
Worker 4 ready for duty at port 8005! (environment: production)
Worker 1 ready for duty at port 8005! (environment: production)
Worker 2 ready for duty at port 8005! (environment: production)

ChatGPT says i must add the following to docker-compose.yml

"enketo:
  image: enketo/enketo-express
  restart: always
  environment:
    - DOMAIN=${DOMAIN}
    - ENKETO_API_KEY=...
    - API_URL=...
    - SUPPORT_EMAIL=${SYSADMIN_EMAIL}
    - REDIS_MAIN_URL=redis://enketo_redis_main:6379
    - REDIS_CACHE_URL=redis://enketo_redis_cache:6379
  depends_on:
    - enketo_redis_main
    - enketo_redis_cache
  ports:
    - "8005:8005""

Is it safe to do that? Is this not supposed to be included during installation?

Those Enketo logs look correct. If things are still not working, try a rebuild and restart.

docker compose pull && docker compose build --pull;
docker compose stop && docker compose up -d;

I tried rebuilding and restarting and got the same results.

sudo docker compose logs enketo
[sudo] password for gm:
enketo-1 | generating enketo configuration...
enketo-1 | starting enketo...
enketo-1 | yarn workspace v1.22.22
enketo-1 | yarn run v1.22.22
enketo-1 | $ node .
enketo-1 | Worker 1 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 4 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 2 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 3 ready for duty at port 8005! (environment: production)

ufw disabled.

Do you think upgrading Central might help? Or I must check the docker-compose.yml

I found this error when checking my browser developer tools:

When i open the error, it shows a message that the resource is not found in the URL.

Hi..!

Try: Troubleshooting: Can't preview forms.

Q: Happening with all of the forms or a particular form?

Great day..!

Hi @MinimalPotato, it is all the forms that are not working. It looks like the transformer can't find the transformed forms. See the latest enketo log below:

enketo-1 | generating enketo configuration...
enketo-1 | starting enketo...
enketo-1 | yarn workspace v1.22.22
enketo-1 | yarn run v1.22.22
enketo-1 | $ node .
enketo-1 | Worker 1 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 4 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 2 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 3 ready for duty at port 8005! (environment: production)
enketo-1 | GET /-/transform/xform/9kDknTkGWCsQNObThHDWEf834Nf9eRY 404 604 - 248.933 ms
enketo-1 | GET /-/transform/xform/9kDknTkGWCsQNObThHDWEf834Nf9eRY 404 604 - 41.192 ms
enketo-1 | GET /-/transform/xform/kuigQgcDeN8pLeopdsA7GlZfc2KqQU8?st=ghBJXtALyD8vrsC4uCCjet2nQMqhpUzgmhiPp56eraE8spV4gWZhlbKdLlBHUh8P 404 604 - 30.488 ms
enketo-1 | generating enketo configuration...
enketo-1 | starting enketo...
enketo-1 | yarn workspace v1.22.22
enketo-1 | yarn run v1.22.22
enketo-1 | $ node .
enketo-1 | Worker 1 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 4 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 3 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 2 ready for duty at port 8005! (environment: production)
enketo-1 | generating enketo configuration...
enketo-1 | starting enketo...
enketo-1 | yarn workspace v1.22.22
enketo-1 | yarn run v1.22.22
enketo-1 | $ node .
enketo-1 | Worker 4 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 1 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 3 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 2 ready for duty at port 8005! (environment: production)
enketo-1 | generating enketo configuration...
enketo-1 | starting enketo...
enketo-1 | yarn workspace v1.22.22
enketo-1 | yarn run v1.22.22
enketo-1 | $ node .
enketo-1 | Worker 4 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 1 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 3 ready for duty at port 8005! (environment: production)
enketo-1 | Worker 2 ready for duty at port 8005! (environment: production)

Hmm.. I still feel like it's an issue related to DNS. I stumbled upon this forum topic of yours - just wanted to confirm where this ODK Central instance is deployed? - is it in the cloud (AWS / DigitalOcean / etc.) or locally within your organization?

Thanks @MinimalPotato. ODK Central instance is deployed locally.

@MinimalPotato, when i troubleshoot as per your guide, i get the following results:

cat /run/systemd/resolve/resolv.conf

This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).

Do not edit.

This file might be symlinked as /etc/resolv.conf. If you're looking at

/etc/resolv.conf and seeing this text, you have followed the symlink.

This is a dynamic resolv.conf file for connecting local clients directly to

all known uplink DNS servers. This file lists all configured search domains.

Third party programs should typically not access this file directly, but only

through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a

different way, replace this symlink by a static file or a different symlink.

See man:systemd-resolved.service(8) for details about the supported modes of

operation for /etc/resolv.conf.

nameserver 192.168.6.10
search health.internal

I see. The health.internal here indeed gives an idea that you're maybe on some internal network. But, let's not get into those details. Hmm.. could you also please share what's currently in your cat /etc/docker/daemon.json file?

We need to make sure that Docker containers can use your internal DNS server (192.168.6.10) to resolve external domains properly, or follow the fallback procedure.

How do i access the daemon.json file? Is it in central?
I am getting this when i run the command:
cat /etc/docker/daemon.json
cat: /etc/docker/daemon.json: No such file or directory
gm@ndoh-ln-crrweb01-01:~$ cd central
gm@ndoh-ln-crrweb01-01:~/central$ ls
client enketo.dockerfile nginx.dockerfile secrets.dockerfile test
docker-compose.dev.yml files postgres14.dockerfile SECURITY.md
docker-compose.yml LICENSE.md postgres-upgrade.dockerfile server
docs Makefile README.md service.dockerfile
gm@ndoh-ln-crrweb01-01:~/central$ cat /etc/docker/
cat: /etc/docker/: Is a directory
gm@ndoh-ln-crrweb01-01:~/central$ cd etc
-bash: cd: etc: No such file or directory
gm@ndoh-ln-crrweb01-01:~/central$ cat /etc/doacker/daemon.json
cat: /etc/doacker/daemon.json: No such file or directory
gm@ndoh-ln-crrweb01-01:~/central$ sudo cat /etc/docker/daemon.json
[sudo] password for gm:
cat: /etc/docker/daemon.json: No such file or directory

So.. the /etc/docker/daemon.json doesn't exists. That's normal, we gotta create it.

Step 01: Create the file

sudo nano /etc/docker/daemon.json

Step 02: Copy & paste this into the blank editor that opens:

{  
    "dns": ["192.168.6.10", "8.8.8.8"]  
}

Step 03: Save the file and exit

  • Press Ctrl + X
  • Type y when it asks to save
  • Hit Enter to confirm

Step 04: Restart containers and docker

docker compose stop  
sudo systemctl restart docker  
docker compose up -d

Caution: Since this touches Docker's core config, I'd suggest taking a backup (preferably a snapshot?) of your server first if possible. Not strictly necessary, but always better to be safe.

It still does not work. Getting the same error.

It looks like pyxform does not create the web forms.

This is the content of docker-compose.dev.yml