Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Support] binhex - Crafty-4

Featured Replies

Hello,

I'm testing this docker container to maybe move from AMP.
I do folder and file permissions set, but the Files tab for the Minecraft server just never loads.

Am I missing something? I don't mind uploading from unraid into the plugins folder but would be nice to be able to do it from the Files section too.

It seems to do the same thing from local IP and from reverse proxy (pangolin, cloudflare).
image.png

Any help would be great.

  • 4 months later...
  • Replies 133
  • Views 63.5k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • Reserved

  • mattekure
    mattekure

    FYI, default username/pw are detailed in the getting started doc.  https://wiki.craftycontrol.com/en/4/docs/Getting Started#logging-in   Logging In Once you reach the Crafty webpag

  • I migrated my world fine to this. Thanks man.  

Posted Images

Hello, suddenly my crafty 4 server is not loading properly. My daughter and I play together still, she is in Germany and had a little time to play and discovered the server was not working... I am running 7.3.1 of Unraid and the latest crafty 4 version. I have rebooted the server, stopped/started the crafty container and get the following logs everytime. BTW, the container says it is running, I can console into it but not get to the web gui.

Any help would be appreciated.

Matt

2026-08-31 04:51:54,626 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   There is nothing to migrate

2026-08-31 04:51:54,656 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Loaded Server: ID 5bcb2015-94b6-428a-b5bb-96b2caadc910 | Name: Sam and Dad Original 1.20.0 | Autostart: False | Delay: 10

2026-08-31 04:51:54,657 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Starting migrations

2026-08-31 04:51:54,659 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   There is nothing to migrate

2026-08-31 04:51:54,686 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Loaded Server: ID e0b1e732-70fb-417d-adfb-93ed6d33a1d7 | Name: Sam and Dad home 1.20.4 | Autostart: False | Delay: 20

2026-08-31 04:51:54,687 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Starting migrations

2026-08-31 04:51:54,688 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   There is nothing to migrate

2026-08-31 04:51:54,717 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Loaded Server: ID 95a0b731-11d3-4bf1-87f9-06c07fd93152 | Name: 1.20.6 import world | Autostart: False | Delay: 10

2026-08-31 04:51:54,719 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Starting migrations

2026-08-31 04:51:54,720 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   There is nothing to migrate

2026-08-31 04:51:54,752 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Loaded Server: ID 0dcbfcb1-5ae8-40cf-b834-69e936d82795 | Name: 1.21.4 import world  | Autostart: False | Delay: 10

2026-08-31 04:51:54,754 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Starting migrations

2026-08-31 04:51:54,754 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   There is nothing to migrate

2026-08-31 04:51:54,787 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Loaded Server: ID 193700a7-8650-4415-aa8a-7e5445551891 | Name: Tower 1.21.5 import | Autostart: False | Delay: 30

2026-08-31 04:51:54,788 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   Starting migrations

2026-08-31 04:51:54,789 DEBG 'start-script' stdout output:
[+] Crafty: 31/08/26 04:51:54 - INFO:   There is nothing to migrate

2026-08-31 04:51:54,791 DEBG 'start-script' stderr output:
Traceback (most recent call last):

2026-08-31 04:51:54,792 DEBG 'start-script' stderr output:
  File "/opt/crafty/main.py", line 462, in <module>
    controller.servers.init_all_servers()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/opt/crafty/app/classes/controllers/servers_controller.py", line 270, in init_all_servers
    "server_obj": ServerInstance(
                  ~~~~~~~~~~~~~~^
        server.get("server_id"),
        ^^^^^^^^^^^^^^^^^^^^^^^^
    ...<5 lines>...
        self.import_helper,
        ^^^^^^^^^^^^^^^^^^^
    ),
    ^
  File "/opt/crafty/app/classes/shared/server.py", line 285, in __init__
    self.player_cache = list(json.load(f).values())
                             ~~~~~~~~~^^^

2026-08-31 04:51:54,792 DEBG 'start-script' stderr output:
  File "/usr/lib/python3.14/json/__init__.py", line 298, in load
    return loads(fp.read(),
        cls=cls, object_hook=object_hook,
        parse_float=parse_float, parse_int=parse_int,
        parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/usr/lib/python3.14/json/__init__.py", line 352, in loads
    return _default_decoder.decode(s)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^
  File "/usr/lib/python3.14/json/decoder.py", line 345, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
               ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/json/decoder.py", line 363, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

2026-08-31 04:51:54,900 DEBG fd 9 closed, stopped monitoring <POutputDispatcher at 22875317376672 for <Subprocess at 22875318647984 with name start-script in state RUNNING> (stdout)>
2026-08-31 04:51:54,900 DEBG fd 11 closed, stopped monitoring <POutputDispatcher at 22875317310544 for <Subprocess at 22875318647984 with name start-script in state RUNNING> (stderr)>
2026-08-31 04:51:54,900 WARN exited: start-script (exit status 1; not expected)
2026-08-31 04:51:54,900 DEBG received SIGCHLD indicating a child quit

Hey fellow crafties, I am posting this in case someone finds it helpful:
I was having problems with the files tab in crafty4, due to a bug in the binhex container messing with the latest crafty version.
All was working, but the files in files tab wouldn't show.

Root cause:
The container's init script symlinks /opt/crafty/servers/config/crafty/servers (and the other Crafty dirs) for persistence. Crafty stores server paths in its database as /opt/crafty/servers/<id>. However, Crafty's files API resolves paths with Path(...).resolve() before running its path-traversal safety check — resolve() follows the symlink and returns /config/crafty/servers/..., which is then compared against the unresolved DB path /opt/crafty/servers/.... The prefixes don't match, relative_to() raises ValueError, and the endpoint returns 500. (See app/classes/web/routes/api/servers/server/files.py, line 357 in v4.10.8.)

So this is a collision between Crafty's path validation and the symlink layout of this image — it likely affects every user of this container on recent Crafty versions, they just may not have checked the dev console.

Workaround (tested, works):
Stop the container, back up crafty.sqlite, then rewrite the stored paths from /opt/crafty/ to /config/crafty/ (both point to the same data, but /config/... survives the resolve() comparison):

Copy

cp /path/to/appdata/binhex-crafty-4/crafty/app/config/db/crafty.sqlite /path/to/appdata/binhex-crafty-4/crafty/app/config/db/crafty.sqlite.bak

docker run --rm -i --entrypoint python3 -v /path/to/appdata/binhex-crafty-4:/config binhex/arch-crafty-4 - <<'PYEOF'
import sqlite3
con = sqlite3.connect('/config/crafty/app/config/db/crafty.sqlite')
cur = con.cursor()
for c in ("path", "log_path", "execution_command"):
    cur.execute(f"UPDATE servers SET {c} = REPLACE({c}, '/opt/crafty/', '/config/crafty/')")
con.commit()
PYEOF

After restarting the container, the Files tab works again for all servers. Note: newly created/imported servers get /opt/crafty/... paths again and need the same treatment.

Simply rerun the same command as before and the newly added/imported server addresses will be adjusted, the existing ones stay untouched.

Happy crafting :)

Edited by McFex

Asking again... if I need to ask elsewhere please let me know as I would like to get this server back up and running. When started, the container appears to start, but the crafty web interface does not start and I get the following logged error...

2026-09-09 04:52:01,400 DEBG 'start-script' stderr output:

File "/opt/crafty/main.py", line 462, in <module>

controller.servers.init_all_servers()

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^

File "/opt/crafty/app/classes/controllers/servers_controller.py", line 270, in init_all_servers

"server_obj": ServerInstance(

~~~~~~~~~~~~~~^

server.get("server_id"),

^^^^^^^^^^^^^^^^^^^^^^^^

...<5 lines>...

self.import_helper,

^^^^^^^^^^^^^^^^^^^

),

^

File "/opt/crafty/app/classes/shared/server.py", line 285, in init

self.player_cache = list(json.load(f).values())

~~~~~~~~~^^^

File "/usr/lib/python3.14/json/__init__.py", line 298, in load

return loads(fp.read(),

cls=cls, object_hook=object_hook,

parse_float=parse_float, parse_int=parse_int,

parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)

File "/usr/lib/python3.14/json/__init__.py", line 352, in loads

return defaultdecoder.decode(s)

~~~~~~~~~~~~~~~~~~~~~~~^^^

File "/usr/lib/python3.14/json/decoder.py", line 345, in decode

obj, end = self.raw_decode(s, idx=_w(s, 0).end())

~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^

File "/usr/lib/python3.14/json/decoder.py", line 363, in raw_decode

raise JSONDecodeError("Expecting value", s, err.value) from None

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

2026-09-09 04:52:01,512 DEBG fd 9 closed, stopped monitoring <POutputDispatcher at 23165816542880 for <Subprocess at 23165817830576 with name start-script in state RUNNING> (stdout)>

2026-09-09 04:52:01,512 DEBG fd 11 closed, stopped monitoring <POutputDispatcher at 23165816476752 for <Subprocess at 23165817830576 with name start-script in state RUNNING> (stderr)>

2026-09-09 04:52:01,512 WARN exited: start-script (exit status 1; not expected)

2026-09-09 04:52:01,512 DEBG received SIGCHLD indicating a child quit

2026-09-09 13:44:16,213 WARN received SIGTERM indicating exit request

  • Author
14 minutes ago, mattw said:

Asking again... if I need to ask elsewhere please let me know as I would like to get this server back up and running. When started, the container appears to start, but the crafty web interface does not start and I get the following logged error...

i would suspect the issue is corrupt configuration, but your best bet for support is to talk directly to the crafty dev's, raise a issue here:- https://gitlab.com/crafty-controller/crafty-4/-/boards#/ or if you prefer chat then talk to them on discord:- https://discord.com/invite/XR5x3ZM

I will try to do that this evening! You are not the dev? Only the person that supplies the Unraid container? Just trying to understand the pecking order here.

Thanks Matt

  • Author
13 minutes ago, mattw said:

You are not the dev? Only the person that supplies the Unraid container?

you got it, i dont have anything to do with the code if crafty, i simply package up what is supplied by the crafty dev's into a unraid user friendly format.

Thanks Bud, we got it sorted on Discord!

Hey, your Unraid Docker Guide link in you sig is broken.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.