itzg / docker-mc-proxy

A BungeeCord server to use in conjunction with itzg/minecraft-server
Apache License 2.0
196 stars 63 forks source link

Unable to mount velocity.toml into the container #133

Closed arno4000 closed 8 months ago

arno4000 commented 1 year ago

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?

itzg commented 1 year ago

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.

arno4000 commented 1 year ago

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.

itzg commented 1 year ago

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)

arno4000 commented 1 year ago

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)]
itzg commented 1 year ago

I am out of ideas at this point. Can you provide the contents of velocity.toml so that I can try to recreate this?

arno4000 commented 1 year ago

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
arno4000 commented 1 year ago

Hi, is there any news regarding this issue?

itzg commented 1 year ago

The config states it is looking for a file named forwarding.secret and you haven't mounted the file into your container.

github-actions[bot] commented 8 months ago

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.

heyvaldemar commented 1 month ago

hey @itzg, @arno4000,

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:/config

Using this setup on macOS, I avoid errors like:

For Windows:

volumes:
  - ./velocity.toml:/config/velocity.toml

Without 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!