Unable to mount velocity.toml into the container
Closed this issue · 10 comments
When starting the container whit the command docker run --rm -it -v ${PWD}/velocity.toml:/server/velocity.toml -e TYPE=VELOCITY itzg/bungeecord, velocity instantly crashes with the following error. As config file I used the default config file, which is generated by velocity in this container (I started the container without the volume mount and copied the velocity.toml file out).
[init] Resolving type given VELOCITY
[init] Downloading https://papermc.io/api/v2/projects/velocity/versions/3.2.0-SNAPSHOT/builds/263/downloads/velocity-3.2.0-SNAPSHOT-263.jar
[mc-image-helper] 20:27:43.179 INFO : Downloaded /server/velocity-3.2.0-SNAPSHOT-263.jar
[init] Setting initial memory to 512m and max to 512m
[20:27:44 INFO]: Booting up Velocity 3.2.0-SNAPSHOT (git-2aaf702a-b263)...
[20:27:44 INFO]: Loading localizations...
[20:27:44 INFO]: Connections will use epoll channels, libdeflate (Linux x86_64) compression, OpenSSL 1.1.x (Linux x86_64) ciphers
[20:27:44 ERROR]: Unable to read/load/save your velocity.toml. The server will shut down.
java.lang.RuntimeException: The forwarding-secret-file does not exist.
at com.velocitypowered.proxy.config.VelocityConfiguration.read(VelocityConfiguration.java:502) ~[velocity-3.2.0-SNAPSHOT-263.jar:3.2.0-SNAPSHOT (git-2aaf702a-b263)]
at com.velocitypowered.proxy.VelocityServer.doStartupConfigLoad(VelocityServer.java:313) ~[velocity-3.2.0-SNAPSHOT-263.jar:3.2.0-SNAPSHOT (git-2aaf702a-b263)]
at com.velocitypowered.proxy.VelocityServer.start(VelocityServer.java:220) ~[velocity-3.2.0-SNAPSHOT-263.jar:3.2.0-SNAPSHOT (git-2aaf702a-b263)]
at com.velocitypowered.proxy.Velocity.main(Velocity.java:69) ~[velocity-3.2.0-SNAPSHOT-263.jar:3.2.0-SNAPSHOT (git-2aaf702a-b263)]
Am i overlooking something or is this a bug?
Do you know what the "forwarding-secret-file" is that it referred to? I'm not sure if that's a field missing or a referenced file that's missing.
I think that in the forwarding-secret-file velocity stores the secret for the forwarding of the player information when the server is in online mode. When I start the container without the mount of the config file, the forwarding-secret-file is generated without an issue. So I think something is wrong with the image of the container in combination with volume mounts.
When I mount the whole /server directory into the container, it works. So there is a bug when mounting only the config file.
When I mount the whole /server directory into the container, it works. So there is a bug when mounting only the config file.
Oh, I had missed that aspect your command. You generally can't layer volumes where /server as a whole is already a volume. Instead you'll need to mount the config file into the /config path and let the startup copy it in from there
https://github.com/itzg/docker-bungeecord#volumes
(The /config path works because it is not volume by default)
This still does not work. I run the container with the command docker run --rm -it -v ${PWD}/velocity.toml:/config/velocity.toml -e TYPE=VELOCITY itzg/bungeecord and the error message is still the same. In the log you can clearly see, that the config file was copied over to /server
[init] Resolving type given VELOCITY
[init] Downloading https://papermc.io/api/v2/projects/velocity/versions/3.2.0-SNAPSHOT/builds/263/downloads/velocity-3.2.0-SNAPSHOT-263.jar
[mc-image-helper] 13:00:59.751 INFO : Downloaded /server/velocity-3.2.0-SNAPSHOT-263.jar
[init] Copying configs over...
[mc-image-helper] 13:01:00.582 INFO : Interpolating /config/velocity.toml -> /server/velocity.toml
[init] Setting initial memory to 512m and max to 512m
[13:01:01 INFO]: Booting up Velocity 3.2.0-SNAPSHOT (git-2aaf702a-b263)...
[13:01:01 INFO]: Loading localizations...
[13:01:01 INFO]: Connections will use epoll channels, libdeflate (Linux x86_64) compression, OpenSSL 1.1.x (Linux x86_64) ciphers
[13:01:01 ERROR]: Unable to read/load/save your velocity.toml. The server will shut down.
java.lang.RuntimeException: The forwarding-secret-file does not exist.
at com.velocitypowered.proxy.config.VelocityConfiguration.read(VelocityConfiguration.java:502) ~[velocity-3.2.0-SNAPSHOT-263.jar:3.2.0-SNAPSHOT (git-2aaf702a-b263)]
at com.velocitypowered.proxy.VelocityServer.doStartupConfigLoad(VelocityServer.java:313) ~[velocity-3.2.0-SNAPSHOT-263.jar:3.2.0-SNAPSHOT (git-2aaf702a-b263)]
at com.velocitypowered.proxy.VelocityServer.start(VelocityServer.java:220) ~[velocity-3.2.0-SNAPSHOT-263.jar:3.2.0-SNAPSHOT (git-2aaf702a-b263)]
at com.velocitypowered.proxy.Velocity.main(Velocity.java:69) ~[velocity-3.2.0-SNAPSHOT-263.jar:3.2.0-SNAPSHOT (git-2aaf702a-b263)]
I am out of ideas at this point. Can you provide the contents of velocity.toml so that I can try to recreate this?
I exported the config file with docker run --rm -it -e TYPE=VELOCITY --name velocity itzg/bungeecord and docker exec velocity cat /server/velocity.toml > velocity.toml. And then the error occurs when running the contaienr with docker run --rm -it -v ${PWD}/velocity.toml:/config/velocity.toml -e TYPE=VELOCITY itzg/bungeecord.
# Config version. Do not change this
config-version = "2.6"
# What port should the proxy be bound to? By default, we'll bind to all addresses on port 25577.
bind = "0.0.0.0:25577"
# What should be the MOTD? This gets displayed when the player adds your server to
# their server list. Only MiniMessage format is accepted.
motd = "<#09add3>A Velocity Server"
# What should we display for the maximum number of players? (Velocity does not support a cap
# on the number of players online.)
show-max-players = 500
# Should we authenticate players with Mojang? By default, this is on.
online-mode = true
# Should the proxy enforce the new public key security standard? By default, this is on.
force-key-authentication = true
# If client's ISP/AS sent from this proxy is different from the one from Mojang's
# authentication server, the player is kicked. This disallows some VPN and proxy
# connections but is a weak form of protection.
prevent-client-proxy-connections = false
# Should we forward IP addresses and other data to backend servers?
# Available options:
# - "none": No forwarding will be done. All players will appear to be connecting
# from the proxy and will have offline-mode UUIDs.
# - "legacy": Forward player IPs and UUIDs in a BungeeCord-compatible format. Use this
# if you run servers using Minecraft 1.12 or lower.
# - "bungeeguard": Forward player IPs and UUIDs in a format supported by the BungeeGuard
# plugin. Use this if you run servers using Minecraft 1.12 or lower, and are
# unable to implement network level firewalling (on a shared host).
# - "modern": Forward player IPs and UUIDs as part of the login process using
# Velocity's native forwarding. Only applicable for Minecraft 1.13 or higher.
player-info-forwarding-mode = "NONE"
# If you are using modern or BungeeGuard IP forwarding, configure a file that contains a unique secret here.
# The file is expected to be UTF-8 encoded and not empty.
forwarding-secret-file = "forwarding.secret"
# Announce whether or not your server supports Forge. If you run a modded server, we
# suggest turning this on.
#
# If your network runs one modpack consistently, consider using ping-passthrough = "mods"
# instead for a nicer display in the server list.
announce-forge = false
# If enabled (default is false) and the proxy is in online mode, Velocity will kick
# any existing player who is online if a duplicate connection attempt is made.
kick-existing-players = false
# Should Velocity pass server list ping requests to a backend server?
# Available options:
# - "disabled": No pass-through will be done. The velocity.toml and server-icon.png
# will determine the initial server list ping response.
# - "mods": Passes only the mod list from your backend server into the response.
# The first server in your try list (or forced host) with a mod list will be
# used. If no backend servers can be contacted, Velocity won't display any
# mod information.
# - "description": Uses the description and mod list from the backend server. The first
# server in the try (or forced host) list that responds is used for the
# description and mod list.
# - "all": Uses the backend server's response as the proxy response. The Velocity
# configuration is used if no servers could be contacted.
ping-passthrough = "DISABLED"
# If not enabled (default is true) player IP addresses will be replaced by <ip address withheld> in logs
enable-player-address-logging = true
[servers]
# Configure your servers here. Each key represents the server's name, and the value
# represents the IP address of the server to connect to.
lobby = "127.0.0.1:30066"
factions = "127.0.0.1:30067"
minigames = "127.0.0.1:30068"
# In what order we should try servers when a player logs in or is kicked from a server.
try = [
"lobby"
]
[forced-hosts]
# Configure your forced hosts here.
"lobby.example.com" = [
"lobby"
]
"factions.example.com" = [
"factions"
]
"minigames.example.com" = [
"minigames"
]
[advanced]
# How large a Minecraft packet has to be before we compress it. Setting this to zero will
# compress all packets, and setting it to -1 will disable compression entirely.
compression-threshold = 256
# How much compression should be done (from 0-9). The default is -1, which uses the
# default level of 6.
compression-level = -1
# How fast (in milliseconds) are clients allowed to connect after the last connection? By
# default, this is three seconds. Disable this by setting this to 0.
login-ratelimit = 3000
# Specify a custom timeout for connection timeouts here. The default is five seconds.
connection-timeout = 5000
# Specify a read timeout for connections here. The default is 30 seconds.
read-timeout = 30000
# Enables compatibility with HAProxy's PROXY protocol. If you don't know what this is for, then
# don't enable it.
haproxy-protocol = false
# Enables TCP fast open support on the proxy. Requires the proxy to run on Linux.
tcp-fast-open = false
# Enables BungeeCord plugin messaging channel support on Velocity.
bungee-plugin-message-channel = true
# Shows ping requests to the proxy from clients.
show-ping-requests = false
# By default, Velocity will attempt to gracefully handle situations where the user unexpectedly
# loses connection to the server without an explicit disconnect message by attempting to fall the
# user back, except in the case of read timeouts. BungeeCord will disconnect the user instead. You
# can disable this setting to use the BungeeCord behavior.
failover-on-unexpected-server-disconnect = true
# Declares the proxy commands to 1.13+ clients.
announce-proxy-commands = true
# Enables the logging of commands
log-command-executions = false
# Enables logging of player connections when connecting to the proxy, switching servers
# and disconnecting from the proxy.
log-player-connections = true
[query]
# Whether to enable responding to GameSpy 4 query responses or not.
enabled = false
# If query is enabled, on what port should the query protocol listen on?
port = 25577
# This is the map name that is reported to the query services.
map = "Velocity"
# Whether plugins should be shown in query response by default or not
show-plugins = false
Hi, is there any news regarding this issue?
The config states it is looking for a file named forwarding.secret and you haven't mounted the file into your container.
This issue is stale because it has been open 30 days with no activity. Please add a comment describing the reason to keep this issue open.
I've encountered an issue with the Docker image regarding the mounting of velocity.toml that seems to behave differently across operating systems. Below are the configurations I found to work:
For Linux or macOS:
volumes:
- ./minecraft-server-proxy-data:/server
- ./velocity.toml:/configUsing this setup on macOS, I avoid errors like:
java.lang.RuntimeException: The forwarding-secret-file does not exist.Unable to read/load/save your velocity.toml. The server will shut down.
For Windows:
volumes:
- ./velocity.toml:/config/velocity.tomlWithout this specific path on Windows, only the default velocity.toml is generated in the server folder, which does not include the parameters set in my .velocity.toml from my repository.
I hope this information is helpful for addressing potential cross-platform compatibility issues with the Docker configuration.
Thank you!