首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以访问运行在docker容器中的T休克服务器上的控制台?

是否可以访问运行在docker容器中的T休克服务器上的控制台?
EN

Stack Overflow用户
提问于 2020-09-07 10:05:18
回答 1查看 372关注 0票数 0

因此,我的主要目标是访问T休克控制台,这样我就可以直接在服务器上运行一些命令。

根据我所发现的,一旦执行了运行服务器的命令,就没有返回控制台的选项,因此:

我想在屏幕模式下运行服务器。

Dockerfile基本运行一些bash脚本,但当我试图在其中添加“屏幕”时,会出现错误。我得到了"bootstrap.sh: 33: bootstrap.sh:语法错误:"fi“意外”(期待“然后”)进入脚本“

我尝试过在google上找到的所有东西,但都没有用:(这是我第一次用bash编写脚本,所以我很感激您的理解:)

以下是原始回购的链接:https://github.com/ryansheehan/terraria/blob/master/tshock/bootstrap.sh

如果有其他更简单的选项来访问服务器的控制台,我会很高兴得到关于如何使这个脚本工作的任何提示:)

我在dockerfile中添加了额外的行来下载屏幕,所以现在看起来如下:

代码语言:javascript
复制
FROM alpine:3.11.6 AS base

RUN apk add --update-cache \
    unzip

# add the bootstrap file
COPY bootstrap.sh /tshock/bootstrap.sh

ENV TSHOCKVERSION=v4.4.0-pre12
ENV TSHOCKZIP=TShock4.4.0_Pre12_Terraria1.4.0.5.zip

# Download and unpack TShock
ADD https://github.com/Pryaxis/TShock/releases/download/$TSHOCKVERSION/$TSHOCKZIP /
RUN unzip $TSHOCKZIP -d /tshock && \
    rm $TSHOCKZIP && \
    chmod +x /tshock/TerrariaServer.exe && \
    # add executable perm to bootstrap
    chmod +x /tshock/bootstrap.sh

FROM mono:6.8.0.96-slim

LABEL maintainer="Ryan Sheehan <rsheehan@gmail.com>"

# documenting ports
EXPOSE 7777 7878

# env used in the bootstrap
ENV CONFIGPATH=/root/.local/share/Terraria/Worlds
ENV LOGPATH=/tshock/logs
ENV WORLD_FILENAME=""

# Allow for external data
VOLUME ["/root/.local/share/Terraria/Worlds", "/tshock/logs", "/plugins"]

# install nuget to grab tshock dependencies
RUN apt-get update -y && \
    apt-get install -y nuget && \
    apt-get install -y screen 
#   rm -rf /var/lib/apt/lists/* /tmp/*

# copy game files
COPY --from=base /tshock/ /tshock/

# Set working directory to server
WORKDIR /tshock

# run the bootstrap, which will copy the TShockAPI.dll before starting the server
ENTRYPOINT [ "/bin/sh", "bootstrap.sh" ]

下面是我为bootstrap.sh修改的代码:

代码语言:javascript
复制
#!/bin/sh
  echo "Entering script"
  if [ -z "$STY" ];then
      echo "Opening screen mode ..."
      exec screen -dm -S terraria bin/bash "$0"
  else
      echo "Continuing with script in screen mode"
      echo "\nBootstrap:\nworld_file_name=$WORLD_FILENAME\nconfigpath=$CONFIGPATH\nlogpath=$LOGPATH\n"
      echo "Copying plugins..."
      cp -Rfv /plugins/* ./ServerPlugins
      
      WORLD_PATH="/root/.local/share/Terraria/Worlds/$WORLD_FILENAME"
  
      if [ -z "$WORLD_FILENAME" ]; then  
        echo "No world file specified in environment WORLD_FILENAME."
        if [ -z "$@" ]; then 
          echo "Running server setup..."
        else
          echo "Running server with command flags: $@"
        fi
        mono --server --gc=sgen -O=all TerrariaServer.exe -configpath "$CONFIGPATH" -logpath "$LOGPATH" "$@" 
      else
        echo "Environment WORLD_FILENAME specified"
        if [ -f "$WORLD_PATH" ]; then
          echo "Loading to world $WORLD_FILENAME..."
          mono --server --gc=sgen -O=all TerrariaServer.exe -configpath "$CONFIGPATH" -logpath "$LOGPATH" -world "$WORLD_PATH" "$@" 
        else
          echo "Unable to locate $WORLD_PATH.\nPlease make sure your world file is volumed into docker: -v <path_to_world_file>:/root/.local/share/Terraria/Worlds"
          exit 1
        fi
      fi
  fi

在删除空空间(如@KamilCuk)之后,建议脚本正在运行,但屏幕似乎无法工作。

以下是控制台的输出:

代码语言:javascript
复制
PS D:\TerrariaServer\Source\terraria\tshock> docker run --rm -p 7777:7777 -v D:/TerrariaServer/World:/root/.local/share/Terraria/Worlds --name="terraria" terraria-image  -world /root/.local/share/Terraria/Worlds/TestWorld.wld
Entering screen mode
+ [ -z  ]
+ echo Entering screen mode
+ screen -d -m -S terraria bin/bash bootstrap.sh
+ echo Screen mode activated
+ echo Continuing with script in screen mode
+ echo \nBootstrap:\nworld_file_name=\nconfigpath=/root/.local/share/Terraria/Worlds\nlogpath=/tshock/logs\n
+ echo Copying plugins...
+ cp -Rfv /plugins/* ./ServerPlugins
Screen mode activated
Continuing with script in screen mode

Bootstrap:
world_file_name=
configpath=/root/.local/share/Terraria/Worlds
logpath=/tshock/logs

Copying plugins...
cp: cannot stat '/plugins/*': No such file or directory
+ WORLD_PATH=/root/.local/share/Terraria/Worlds/
+ [ -z  ]
+ echo No world file specified in environment WORLD_FILENAME.
+ [ -z -world /root/.local/share/Terraria/Worlds/TestWorld.wld ]
+ echo Running server with command flags: -world /root/.local/share/Terraria/Worlds/TestWorld.wld
+ mono --server --gc=sgen -O=all TerrariaServer.exe -configpath /root/.local/share/Terraria/Worlds -logpath /tshock/logs -world /root/.local/share/Terraria/Worlds/TestWorld.wld
No world file specified in environment WORLD_FILENAME.
Running server with command flags: -world /root/.local/share/Terraria/Worlds/TestWorld.wld
Error Logging Enabled.
TerrariaAPI Version: 2.1.0.0 (Protocol v1.4.0.5 (230), OTAPI 1.4.0.5)
[TShock] Info Config path has been set to /root/.local/share/Terraria/Worlds
[TShock] Info Log path has been set to /tshock/logs
TShock was improperly shut down. Please use the exit command in the future to prevent this.
TShock 4.4.0.0 (Go to sleep Patrikkk, Icy, Chris, Death, Axeel, Zaicon, hakusaro, Zack, and Yoraiz0r <3) now running.
AutoSave Enabled
Backups Enabled
Welcome to TShock for Terraria!
TShock comes with no warranty & is free software.
You can modify & distribute it under the terms of the GNU GPLv3.
[Server API] Info Plugin TShock v4.4.0.0 (by The TShock Team) initiated.
Terraria Server v1.4.0.5

Resetting game objects 1%
Resetting game objects 2%
Resetting game objects 3%
...
EN

回答 1

Stack Overflow用户

发布于 2020-09-07 11:07:14

我不是直接看到你的切入点脚本的主要问题。但我想提供一些步骤,希望能解决这些问题:

  1. 避免行f [ -z "$@" ]。见这里为什么。 建议:f [ -z "$*" ]
  2. 另外,这一行也是有问题的:echo "Running server with command flags: $@" --参见这里为什么。 建议:echo "Running server with command flags: $*"
  3. 有时,它可以帮助,进入容器和“玩”。这允许您像在任何普通的Linux shell中一样,在您的坞容器中工作。 请看一下https://docs.docker.com/engine/reference/commandline/run/选项docker run__。 示例 如果您想启动容器,可以运行bash (...or sh,或您正在使用的任何shell ): 码头运行-it bash 当您的容器已经在运行并且您想要输入它时,这也适用于exec。 码头主管-it bash
  4. 在调用入口点脚本以获得详细输出时,请尝试使用bash -x选项。有时它有助于发现错误。 入口点"/bin/bash","-x“"bootstrap.sh”
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63775435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档