这是一个 Docker 镜像,提供了 Minecraft 代理的选择,例如 BungeeCord 和 Velocity。它旨在与 itzg/minecraft-server 容器结合使用。
当与服务器镜像 itzg/minecraft-server 一起使用时,您可以通过设置ONLINE_MODE=FALSE
来禁用bungeecord所需的在线模式,例如
docker run ... -e ONLINE_MODE=FALSE itzg/minecraft-server
以下是可以使用docker compose up -d
启动的示例:
services :
mc :
image : itzg/minecraft-server
environment :
EULA : " TRUE "
ONLINE_MODE : " FALSE "
volumes :
- mc-data:/data
proxy :
image : itzg/mc-proxy
environment :
BUNGEE_JAR_REVISION : " 1 "
CFG_MOTD : Powered by Docker
REPLACE_ENV_VARIABLES : " true "
ports :
- " 25565:25577 "
volumes :
- ./config.yml:/config/config.yml
- proxy-data:/server
volumes :
mc-data :
proxy-data :
该映像包含 mc-monitor 并使用其status
命令来持续检查容器的状态。可以从docker ps
的STATUS
列观察到
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b418af073764 mc "/usr/bin/run-bungeecord.sh" 43 seconds ago Up 41 seconds (healthy) 0.0.0.0:25577->25577/tcp mc
您还可以通过脚本友好的方式查询容器的运行状况:
> docker container inspect -f "{{.State.Health.Status}}" mc
healthy
类型=松紧绳
服务器的类型。当类型设置为CUSTOM
时,需要环境设置BUNGEE_JAR_URL
。
可能的值:
BUNGEECORD
WATERFALL
VELOCITY
CUSTOM
内存=512m
要指定给 JVM 的 Java 内存堆大小。将其设置为空字符串将使 JVM 根据容器声明的内存限制计算堆大小。请务必考虑将-XX:MaxRAMPercentage=
(替换
)添加到JVM_XX_OPTS
,其中 JVM 默认值为 25%。
图标
将其设置为图像 URL 将下载图标并将其(如果需要)转换为 64x64 PNG,并将其放置在/server/server-icon.png
中。
OVERRIDE_ICON
如果设置了ICON
,将覆盖 /server 目录中任何预先存在的 server-icon.png 文件。
INIT_MEMORY =${内存}
可以设置为使用不同的初始堆大小。
最大内存=${内存}
可以设置为使用不同的最大堆大小。
JVM_OPTS / JVM_XX_OPTS
要传递到 JVM 的其他空格分隔选项,其中JVM_XX_OPTS
将在JVM_OPTS
之前添加到 java 命令行中。
NETWORKADDRESS_CACHE_TTL =60
缓存成功网络地址查找的秒数。当 Minecraft 服务器容器重新启动和/或重新安排并重新分配新的容器 IP 地址时,较低的值会很有帮助。
插件
用于将逗号分隔的 *.jar url 列表下载到插件文件夹。
-e PLUGINS=https://www.example.com/plugin1.jar,https://www.example.com/plugin2.jar
SPIGET_PLUGINS
可以使用逗号分隔的 SpigotMC 资源 ID 列表来设置SPIGET_PLUGINS
变量,以使用 spiget API 自动下载 SpigotMC 插件。 zip 文件的资源将展开到插件目录中,而简单的 jar 文件的资源将移动到那里。
注意:该变量特意拼写为 SPIG E T,并带有“E”
资源 ID可以从 URL 的短名称和点后面的数字部分找到。例如,ID 为313,来自
https://www.spigotmc.org/resources/bungeetablistplus.313/
===
MODRINTH_PROJECTS
逗号或换行符分隔的项目别名(短名称)或 ID 列表。项目 ID 位于“技术信息”部分。 slug 是页面 URL 中/mod/
后面的部分:
https://modrinth.com/mod/fabric-api
----------
|
+-- project slug
此外,可以在项目 slug 之后使用冒号符号和版本 ID/类型来声明特定版本/类型。版本 ID 可以在“元数据”部分找到。有效的版本类型有release
、 beta
、 alpha
。
可以通过将MODRINTH_DOWNLOAD_DEPENDENCIES
设置为none
、 optional
或required
(默认值)来调整依赖关系解析。
注意变量MINECRAFT_VERSION
必须设置为相应的 Minecraft 版本。
启用_RCON
启用rcon服务器(使用第三方插件工作)。
BUNGEECORD
、 WATERFALL
和CUSTOM
VELOCITY
RCON_端口
定义rcon的端口
RCON_密码
定义rcon的密码
BUNGEE_JOB_ID =lastStableBuild
要下载和运行的工件的 Jenkins 作业 ID,在派生BUNGEE_JAR_URL
的默认值时使用
BUNGEE_JAR_REVISION
默认为${BUNGEE_JOB_ID}
的值,但可以设置为任意递增的值以强制升级下载的 BungeeCord jar 文件。
BUNGEE_BASE_URL
默认为:
BUNGEECORD
):https://ci.md-5.net/job/BungeeCordWATERFALL
):https://papermc.io/ci/job/Waterfall/用于派生BUNGEE_JAR_URL
的默认值
BUNGEE_JAR_URL
如果设置,可以指定 BungeeCord.jar 的自定义、完全限定 URL;但是,您将无法从docker run
compose 文件中引用其他环境变量。默认为:
BUNGEECORD
): ${BUNGEE_BASE_URL}/${BUNGEE_JOB_ID}/artifact/bootstrap/target/BungeeCord.jar
这优先于BUNGEE_JAR_FILE
。
BUNGEE_JAR_FILE
对于TYPE=CUSTOM
,允许设置位于容器内的自定义 BungeeCord JAR。
必须是现有文件的有效路径。
WATERFALL_VERSION =最新
对于TYPE=WATERFALL
,允许下载 Waterfall 的特定发布流。
WATERFALL_BUILD_ID =最新
对于TYPE=WATERFALL
,允许下载给定版本中特定版本的 Waterfall。
VELOCITY_VERSION =最新
对于TYPE=VELOCITY
,指定要下载和运行的 Velocity 版本。
VELOCITY_BUILD_ID =最新
对于TYPE=VELOCITY
,允许下载给定版本内的特定版本的 Velocity。
HEALTH_HOST =本地主机
允许配置容器健康检查所联系的主机。
HEALTH_USE_PROXY =假
使用 Bungeecord 的proxy_protocol
选项时设置为“true”
ENABLE_JMX =假
要启用远程 JMX,例如使用 VisualVM 或 JMC 进行分析,请添加环境变量ENABLE_JMX=true
,将JMX_HOST
设置为运行 Docker 容器的 IP/主机,并添加 TCP 端口 7091 的端口转发
/服务器
BungeeCord 启动的工作目录。这是将加载其config.yml
目录。
/插件
在服务器启动之前,插件将从此目录复制。
/配置
该目录的内容将同步到/server
目录中。除非REPLACE_ENV_DURING_SYNC
设置为“false”,否则文件中的变量占位符将按以下部分所述进行处理。
25577
BungeeCord 的监听端口,您通常需要使用以下命令将其端口映射到标准 Minecraft 服务器端口 25565:
-p 25565:25577
下表显示了镜像标签支持的Java版本和CPU架构:
标签 | 爪哇 | 架构 |
---|---|---|
最新的 | 17 号 | amd64、arm64、armv7 |
java8 | 8 | amd64、arm64、armv7 |
java11 | 11 | amd64、arm64、armv7 |
RCON 默认情况下处于启用状态,因此您可以在容器中exec
以访问 Bungeecord 服务器控制台:
docker exec -i mc rcon-cli
注意:交互式使用 rcon-cli 需要-i
。
要运行简单的一次性命令(例如停止 Bungeecord 服务器),请将命令作为参数传递给rcon-cli
,例如:
docker exec mc rcon-cli en
在这种情况下不需要-i
。
为了附加Bungeecord服务器并与之交互,请在启动容器时添加-it
,例如
docker run -d -it -p 25565:25577 --name mc itzg/mc-proxy
这样您就可以随时使用
docker attach mc
然后 Control-p Control-q分离。
对于远程访问,请将 Docker 守护程序配置为使用tcp
套接字(例如-H tcp://0.0.0.0:2375
)并从另一台计算机连接:
docker -H $HOST:2375 attach mc
除非您位于家庭/私人 LAN 上,否则应启用 TLS 访问。
BungeeCord 配置指南
要从 zip 或 tgz 文件安装所有服务器内容(jar、mod、插件、配置等),然后将GENERIC_PACK
设置为存档文件的容器路径或 URL。
如果需要一起应用多个通用包,请设置GENERIC_PACKS
,并使用逗号分隔的存档文件路径和/或文件 URL 列表。
为了避免重复,每个条目将以GENERIC_PACKS_PREFIX
的值作为前缀,并以GENERIC_PACKS_SUFFIX
的值作为后缀,这两个条目都是可选的。例如,以下变量
GENERIC_PACKS=configs-v9.0.1,mods-v4.3.6
GENERIC_PACKS_PREFIX=https://cdn.example.org/
GENERIC_PACKS_SUFFIX=.zip
将扩展为https://cdn.example.org/configs-v9.0.1.zip,https://cdn.example.org/mods-v4.3.6.zip
。
有时,您的 mod 或插件需要仅在运行时可用的配置信息。例如,如果您需要配置插件来连接到数据库,您不希望将此信息包含在 Git 存储库或 Docker 映像中。或者,您可能有一些运行时信息,例如容器启动后需要在配置文件中设置的服务器名称。
对于这些情况,可以选择将配置中定义的变量替换为容器运行时定义的环境变量。
如果将环境变量REPLACE_ENV_VARIABLES
设置为TRUE
启动脚本将遍历/server
卷内的所有文件并替换与您定义的环境变量匹配的变量。您想要替换的变量需要声明为${YOUR_VARIABLE}
,这在 shell 脚本语言中很常见。
使用REPLACE_ENV_VARIABLE_PREFIX
您可以定义一个前缀(默认为CFG_
,以仅匹配预定义的环境变量。
如果您想使用文件作为值(例如使用 Docker 机密时),您可以将后缀_FILE
添加到变量名称(在运行命令中)。例如, ${CFG_PASSWORD_FILE}
将替换为CFG_PASSWORD_FILE
环境变量指定的文件的内容。
这是一个完整的示例,我们想要替换database.yml
中的值。
---
database :
host : ${CFG_DB_HOST}
name : ${CFG_DB_NAME}
password : ${CFG_DB_PASSWORD}
您的docker-compose.yml
文件如下所示:
version : " 3.8 "
# Other docker-compose examples in /examples
services :
proxy :
image : itzg/mc-proxy
ports :
- " 25577:25577 "
volumes :
- " proxy:/server "
environment :
# enable env variable replacement
REPLACE_ENV_VARIABLES : " TRUE "
# define an optional prefix for your env variables you want to replace
ENV_VARIABLE_PREFIX : " CFG_ "
# and here are the actual variables
CFG_DB_HOST : " http://localhost:3306 "
CFG_DB_NAME : " minecraft "
CFG_DB_PASSWORD_FILE : " /run/secrets/db_password "
restart : always
volumes :
proxy :
secrets :
db_password :
file : ./db_password
db_password
的内容:
ug23u3bg39o-ogADSs
通过将变量PATCH_DEFINITIONS
设置为包含一个或多个补丁定义 json 文件或补丁集 json 文件的目录路径,可以将基于 JSON 路径的补丁应用于一个或多个现有文件。
补丁定义的file
和value
字段可能包含${...}
变量占位符。占位符中允许的环境变量可以通过设置REPLACE_ENV_VARIABLE_PREFIX
来限制,默认为“CFG_”。
以下示例显示了一个补丁集文件,其中paper.yaml
配置文件中的各个字段都可以修改和添加:
{
"patches" : [
{
"file" : " /data/paper.yml " ,
"ops" : [
{
"$set" : {
"path" : " $.verbose " ,
"value" : true
}
},
{
"$set" : {
"path" : " $.settings['velocity-support'].enabled " ,
"value" : " ${CFG_VELOCITY_ENABLED} " ,
"value-type" : " bool "
}
},
{
"$put" : {
"path" : " $.settings " ,
"key" : " my-test-setting " ,
"value" : " testing "
}
}
]
}
]
}
支持的文件格式:
该映像可以作为非 root 用户运行,但需要一个可由该 uid 写入的附加/server
卷,例如:
docker run ... -u $uid -v $(pwd)/data:/server itzg/mc-proxy
latest
图像标签基于 Java 21,但替代图像标签可在不同的 java 版本上运行。
可以使用图像 Java 变体,如下所示:
itzg/mc-proxy:{variant}
或使用发布版本,例如2024.5.0
itzg/mc-proxy:{release}-{variant}
变体 | Java版本 | CPU类型 |
---|---|---|
最新的 | 21 | amd64,arm64 |
java21 | 21 | amd64,arm64 |
java17 | 17 号 | amd64,arm64,armv7 |
java11 | 11 | amd64,arm64,armv7 |
java8 | 8 | amd64,arm64,armv7 |