Trying to run Pterodactyl Wings on Truenas Scale Electric Eel

Hi, I am messing around with Electric Eel to test if my long wish was going to be possible… Installing Pterodactyl wings (GitHub - pterodactyl/wings: The server control plane for Pterodactyl Panel. Written from the ground-up with security, speed, and stability in mind.).

Pterodactyl creates a nice portal / panel where you can create and manage game servers (using docker).

The panel creates docker containers for the game servers under the hood, now I tried to install it and got really far, but once I created a server it made an error.
The error is as follows: “invalid mount config for type “bind”: bind source path does not exist”

I guess that the version of docker Truenas is using doesn’t allow other dockers to create dockers if that makes sense?

Can anyone think of a way to do this?

Here is the “docker compose” I was deploying.
services:
wings:
image: Package wings · GitHub
container_name: pterodactyl-wings
restart: always
logging:
driver: “json-file”
options:
max-size: “10m”
max-file: “3”
networks:
- wings
ports:
- 2022:2022
- 3443:443 #Web address port
#- $PORT_UNKNOWN:8080
tty: true
environment:
TZ: Europe/Amsterdam
WINGS_UID: 0
WINGS_GID: 0
WINGS_USERNAME: pterodactyl
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/containers/:/var/lib/docker/containers/
- /mnt/ssd-tank/docker-files/pterodactyl/wings/config:/etc/pterodactyl/ #config file from Panel
- /mnt/ssd-tank/docker-files/pterodactyl/wings/data:/var/lib/pterodactyl/ #game server files
- /mnt/ssd-tank/docker-files/pterodactyl/wings/logs:/var/log/pterodactyl/ #Allows Crowdsec to read logs
- /mnt/ssd-tank/docker-files/pterodactyl/wings/tmp:/tmp/pterodactyl/
- /mnt/ssd-tank/docker-files/pterodactyl/wings/daemon-data:/srv/daemon-data/
- /mnt/ssd-tank/docker-files/pterodactyl/wings/logs/laravel:/app/storage/logs/ #Laravel log files
db:
image: mariadb:latest
container_name: pterodactyl-db
restart: always
command: --default-authentication-plugin=mysql_native_password
ports:
- 33306:3306
networks:
- wings
volumes:
- /mnt/ssd-tank/docker-files/pterodactyl/wings/db:/var/lib/mysql
environment:
- MYSQL_DATABASE=“servers”
- MYSQL_USER=“pterodactyl”
- MYSQL_PASSWORD=passwordexample
- MYSQL_ROOT_PASSWORD=passwordexample
healthcheck:
test: [“CMD”, “mariadb-admin”, “ping”, “-proot”, “–password=passwordexample”]
interval: 30s
timeout: 10s
retries: 5
labels:
- “autoheal=true”
logging:
driver: “json-file”
options:
max-size: “10m”
max-file: “3”
networks:
wings:
name: wings
driver: bridge
driver_opts:
com.docker.network.bridge.name: wings
pterodactyl_nw:
driver: bridge

I have been googling around, but only found people telling me to reinstall docker…

I am also keenly interested in this.

+1 Here.

I Imagine this is a problem, but I really don’t know much about anything

volumes:
  - /var/run/docker.sock:/var/run/docker.sock
  - /var/lib/docker/containers/:/var/lib/docker/containers/

For sake of anyone ending up here from google, there is now a community image for Pterodactyl.

1 Like

Does anyone know if the Pterodactyl Panel app also includes the Wings db component?

The community app is just the panel. I am trying to get the db and wings going as a container now.

1 Like

Any luck on this? I’m currently trying to get wings installed alongside the pterodactyl-panel app to install a custom egg for Valheim

Hi there,
So I had setup wings on my truenas machine using docker that came with the portainer app from TrueNAS.
Next, I had added a stack for my pterodactyl panel and wings to portainer. I first used the default volume mappings from the wings example compose file that also contained: /var/lib/pterodactyl/:/var/lib/pterodactyl/ for my wings volumes.

This worked fine until I updated TrueNAS, all my contents of /etc/… and /var/… got reset, I didn’t know this was I thing… (I’m new to TrueNAS) So I started looking into ways to make my server container data persistent.
I found that /var/lib/pterodactyl contains the data of my server, this location also has a folder “volumes” with the container volume of each server. So this was the data I needed to persist.

When I changed my mount from /var/lib/pterodactyl:/var/lib/pterodactyl to /mnt///pterodactyl/wings/libvar:/var/lib/pterodactyl, I got the same error as OP after installing a server:

Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /var/lib/pterodactyl/volumes/<container-id>

Which is weird because on my host, the structure of the wings data folder was there including my server volumes. After a lot of trial and error I found that for some reason I’ve yet to figure out, you can make it work by changing the wings data folder to a path that exactly matches the host path. Which in my case was /mnt///pterodactyl/wings/libvar.

The wings config (stored at /etc/pterodactyl/config.yml by default but I also recommend putting this on your pool by changing the wing volume) allows you to change the system.data value which by default is /var/lib/pterodactyl/volumes.
So mine now looks like: (obviously I removed my personal values with ‘x’)

debug: false
uuid: x
token_id: x
token: x
api:
  host: x
  port: x
  ssl:
    enabled: true
    cert: x/fullchain.pem
    key: x/privkey.pem
  upload_limit: 100
system:
  data: /mnt/<pool>/<dataset>/pterodactyl/wings/varlib/volumes
  sftp:
    bind_port: x
allowed_mounts: []
remote: 'x'

Here under system.data you should add the exact path of your data folder on the host system following ‘/volumes’.
Then change your var/lib folder in the wings volume configuration to:
/mnt///pterodactyl/wings/libvar:/mnt///pterodactyl/wings/libvar

  wings:
    container_name: pterodactyl_wings
    image: ghcr.io/pterodactyl/wings:latest
    restart: always
    ports:
      - "x:x"
      - "x:x"
    tty: true
    environment:
      TZ: "UTC"
      WINGS_UID: x
      WINGS_GID: x
      WINGS_USERNAME: x
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/var/lib/docker/containers/:/var/lib/docker/containers/"
      - "/mnt/<pool>/<dataset>/pterodactyl/wings/etc/:/etc/pterodactyl/"
      - "/mnt/<pool>/<dataset>/pterodactyl/wings/varlib/:/mnt/<pool>/<dataset>/pterodactyl/wings/varlib/"
      - "/var/log/pterodactyl/:/var/log/pterodactyl/"
      - "/tmp/pterodactyl/:/tmp/pterodactyl/"
      - "/etc/ssl/certs:/etc/ssl/certs:ro"

After doing this, I recreated a new server on this wings node and it started installing!

Now I haven’t tested whether my server volumes now really persist after a TrueNAS system update but I’m feeling more confident now that atleast it’s stored on my pool.

I hope this is a solution for some of you out there!