tomcat在ubuntu上获取时区问题

catalina.sh 首行增加 export JAVA_OPTS="-Duser.timezone=Asia/Shanghai"

<think>我们正在查找在Docker上部署Unity Dedicated Server的方法。根据引用[1]和引用[2],我们可以得到一些线索: 引用[1]展示了一个运行雨中冒险2(Risk of Rain 2)专用服务器的Docker命令,使用了特定的镜像(avivace/ror2server:latest)并映射了UDP端口。 引用[2]提到了使用docker-compose来部署open-match(一个多人匹配框架),这提示我们可以使用docker-compose来管理多个容器。 部署Unity Dedicated Server的Docker容器通常有两种方式: 1. 使用现有的第三方镜像(如引用[1]中的镜像)。 2. 自己构建Docker镜像(如引用[3]中构建tomcat镜像的思路,但我们需要构建的是Unity服务器镜像)。 由于用户的问题是关于Unity Dedicated Server,我们假设用户已经有一个构建好的Linux Dedicated Server程序(即从Unity构建出的Linux可执行文件)。 下面是两种方法的详细步骤: ### 方法一:使用现有镜像(如果有) 如果游戏社区已经提供了该游戏的专用服务器镜像,可以直接运行。例如引用[1]中的命令: ```bash docker run --name my-server -d \ -e R2_HOSTNAME="My Server Name" \ -e R2_HEARTBEAT=1 \ -p 27015:27015/udp \ -p 27016:27016/udp \ avivace/ror2server:latest ``` 但请注意,这个镜像是针对雨中冒险2的,其他游戏需要寻找对应的镜像或自己构建。 ### 方法二:自行构建Docker镜像 如果找不到现成的镜像,或者需要部署自己开发的Unity游戏的专用服务器,则需要自己构建镜像。 步骤: 1. **准备Dockerfile** 创建一个目录,将Unity构建的Linux专用服务器文件(例如`server.x86_64`以及相关的`ServerData`目录等)放入该目录。 然后编写Dockerfile,例如: ```Dockerfile # 使用Ubuntu作为基础镜像(注意:选择与构建环境兼容的版本,如Ubuntu 22.04) FROM ubuntu:22.04 # 安装依赖库(根据之前Linux部署的依赖) RUN apt-get update && apt-get install -y \ libgtk2.0-0 \ libsoup2.4-1 \ libarchive13 \ libpng16-16 \ && rm -rf /var/lib/apt/lists/* # 创建运行专用服务器的用户(安全考虑) RUN useradd -m unityserver # 创建服务器目录 RUN mkdir -p /opt/unity_server WORKDIR /opt/unity_server # 将构建好的服务器文件复制到镜像中(注意:构建上下文路径) COPY ./build_linux_server /opt/unity_server # 设置文件所有权 RUN chown -R unityserver:unityserver /opt/unity_server # 切换到非root用户 USER unityserver # 设置容器启动时运行的命令 ENTRYPOINT ["./server.x86_64", "-batchmode", "-nographics", "-logFile", "server.log"] ``` 2. **构建Docker镜像** 在Dockerfile所在目录执行: ```bash docker build -t my-unity-server . ``` 3. **运行容器** 运行容器并映射所需端口(例如,Unity服务器默认使用UDP端口7777,以及Steam相关端口): ```bash docker run -d --name unity-dedicated-server \ -p 7777:7777/udp \ -p 27015:27015/udp \ my-unity-server ``` 或者,可以映射一个数据卷来持久化日志和配置文件(如果有): ```bash docker run -d --name unity-dedicated-server \ -v ./server_data:/opt/unity_server \ -p 7777:7777/udp \ -p 27015:27015/udp \ my-unity-server ``` ### 使用docker-compose管理(可选) 如果服务复杂,可以使用docker-compose。创建一个`docker-compose.yml`文件: ```yaml version: '3.8' services: unity-server: image: my-unity-server build: . # 如果镜像尚未构建,可以使用build指定Dockerfile路径 container_name: unity-dedicated-server ports: - "7777:7777/udp" - "27015:27015/udp" volumes: - ./server_data:/opt/unity_server restart: unless-stopped ``` 然后运行: ```bash docker-compose up -d ``` ### 注意事项: - **端口映射**:确保映射的端口与Unity服务器配置的端口一致(包括Steam集成所需的端口)。 - **环境变量**:如果需要通过环境变量配置服务器(如引用[1]中的`R2_HOSTNAME`),可以在Dockerfile中使用`ENV`或者在运行命令中使用`-e`传递。 - **日志**:日志文件将写入容器内的`/opt/unity_server/server.log`,可以通过数据卷挂载到宿主机查看。 - **时区设置**:可以在Dockerfile中设置时区(如`ENV TZ=Asia/Shanghai`)并安装`tzdata`。 如果游戏需要额外的配置(如配置文件),可以在构建镜像时复制进去,或者在运行时挂载配置文件。 引用[1]提供了一个很好的例子,展示了如何通过环境变量配置服务器并映射端口。 ### 相关问题 §§相关问题§§ 1. 如何为Unity专用服务器Docker容器传递配置文件? 2. 如何查看运行中的Unity专用服务器容器的日志? 3. 如何更新Unity专用服务器的Docker镜像? 4. 如何优化Unity专用服务器在Docker中的性能? 5. Unity专用服务器在Docker中运行时如何调试? </think>以下是在Docker上部署Unity Dedicated Server的完整方案,综合最佳实践和引用内容: ### 一、核心部署流程 #### 1. 准备Docker镜像 **方案A:使用现成镜像**(如引用[1]示例) ```dockerfile # 雨中冒险2示例(直接运行现有镜像) docker run --name unity-server -d \ -e SERVER_NAME="My_Server" \ -p 7777:7777/udp \ -p 27015:27015 \ avivace/ror2server:latest ``` **方案B:自定义构建镜像** ```dockerfile # Dockerfile(适用于自定义Unity项目) FROM ubuntu:22.04 # 安装依赖 RUN apt-get update && apt-get install -y \ libgtk2.0-0 libsoup2.4-1 libarchive13 libpng16-16 # 创建专用用户 RUN useradd -m unityserver # 拷贝服务器文件(需提前构建Linux版server.x86_64) COPY build/server.x86_64 /app/ RUN chown -R unityserver:unityserver /app USER unityserver WORKDIR /app ENTRYPOINT ["./server.x86_64", "-batchmode", "-nographics"] ``` #### 2. 构建并运行容器 ```bash # 构建镜像 docker build -t unity-dedicated-server . # 运行容器(映射必需端口) docker run -d --name my-server \ -p 7777:7777/udp \ # 游戏数据传输 -p 27015:27015/tcp \ # Steam服务器列表 -p 27016:27016/udp \ # Steam通信端口 unity-dedicated-server ``` #### 3. 环境变量配置(引用[1]) ```bash # 通过-e传递运行时参数 docker run -d \ -e R2_HOSTNAME="官方服务器" \ -e R2_HEARTBEAT=1 \ # 启用Steam心跳 -e R2_MAXPLAYERS=4 \ ... ``` ### 二、关键配置说明 1. **端口映射要求** | 端口 | 协议 | 用途 | |---------|------|---------------------| | 7777 | UDP | 游戏数据通信 | | 27015 | TCP | Steam服务器列表 | | 27016 | UDP | Steam P2P网络 | | 27031-27036 | UDP | Steam客户端通信(可选) | 2. **持久化数据管理** ```bash # 挂载配置文件和数据目录 docker run -d \ -v ./savedata:/app/ServerData \ -v ./config:/app/Config \ ... ``` ### 三、高级部署模式 #### 1. Docker Compose集群(引用[2]) ```yaml # docker-compose.yml version: '3.8' services: server1: image: unity-dedicated-server ports: - "7777:7777/udp" - "27015:27015" environment: - SERVER_ID=1 - SERVER_REGION=asia server2: image: unity-dedicated-server ports: - "7778:7777/udp" - "27016:27015" environment: - SERVER_ID=2 - SERVER_REGION=europe ``` #### 2. 集成Open-Match(引用[2]) ```dockerfile # 在Dockerfile中添加匹配服务 FROM open-match-base AS matchmaker COPY --from=unity-dedicated-server /app /app # 同时运行游戏服务器和匹配服务 CMD ["./server.x86_64", "&", "./open-match-matchmaker"] ``` ### 四、运维管理 1. **日志监控** ```bash docker logs -f my-server --tail 50 | grep "PlayerConnected" ``` 2. **性能监控** ```bash docker stats my-server --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" ``` 3. **自动重启策略** ```bash docker run --restart=unless-stopped ... ``` ### 五、常见问题解决 1. **库依赖缺失**:确保基础镜像包含`libgtk2.0-0`等基础库[^1] 2. **权限问题**:使用非root用户运行容器(见Dockerfile示例) 3. **Steam连接失败**:映射完整的端口范围`27000-27036/udp` 4. **日志持久化**:挂载`-v ./logs:/app/Logs` > **重要提示**:Unity Dedicated Server的Docker镜像需在Linux构建环境中生成(Windows/Mac构建的二进制文件可能不兼容) --- **
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值