我试图在bash脚本(需要用户输入的交互式 shell )中使用Valve的steamcmd包。当然,我希望能够作为Docker构建的一部分手动发送输入,但是我遇到了一些问题。

我首先在本地安装steamcmd并运行以下脚本:

./steamcmd <<LOGIN
login anonymous
quit
LOGIN

毫不奇怪,它可以正常工作,并产生以下输出:
Steam Console Client (c) Valve Corporation
-- type 'quit' to exit --
Loading Steam API...OK.

Connecting anonymously to Steam Public...Logged in OK
Waiting for user info...OK
Steam>

当我在Docker中尝试相同的命令时,问题就开始了:
RUN ./steamcmd <<LOGIN \
login anonymous \
quit \
LOGIN

在构建过程中,它运行./steamcmd,但卡在输入提示上,Heredoc中的任何数据均未传递,并且构建从未完成。我究竟做错了什么?

额外信息:
  • 基本镜像:ubuntu:latest
  • 用户:非根
  • 最佳答案

    Docker构建过程是完全非交互的,如果您正在寻找一些输入,则需要传递build-args,并在随后的RUN命令中引用这些build-args。

    但是如建议中所述,您需要将它们作为CMD运行,因为它将卡住构建过程。

    这是Dockerfilesome example入口点,可能对您有帮助,

    # start steamcmd to force it to update itself
    RUN ./steamcmd/steamcmd.sh +quit
    
    # start the server main script
    ENTRYPOINT ["bash", "/home/steam/server_scripts/server.sh"]
    

    您可以将其更改为
    /home/steam/steamcmd/steamcmd.sh \
        +login anonymous \
        +exit
    

    上面列表中的一个示例是cs_go.sh,您需要将其重命名为server.sh
    #!/bin/bash
    
    # update server's data
    /home/steam/steamcmd/steamcmd.sh \
        +login anonymous \
        +force_install_dir /home/steam/server_data \
        +app_update 740 \
        +exit
    
    # start the server
    /home/steam/server_data/srcds_run \
        -game csgo -console -usercon \
        -secure -autoupdate -tickrate 64 +hostport 27015 \
        +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 \
        -port 27015 -console -secure -nohltv +sv_pure 0 +ip 0.0.0.0
    
    exit 0
    

    已更新:

    自动运行SteamCMD

    有两种方法可以使SteamCMD自动化。 (在Linux / OS X上用./steamcmd.sh替换steamcmd。)

    命令行

    注意:在命令行上使用-beta选项时,必须以特殊方式将其引号,例如+app_update“90 -beta beta”。

    注意:如果这不起作用,请尝试像"+app_update 90 -beta beta"一样放置它。

    将命令附加到以加号开头的命令行,例如:
    steamcmd +login anonymous +force_install_dir ../csgo_ds +app_update 740 +quit
    

    Automating SteamCMD

    关于bash - Bash Heredoc似乎不适用于Docker RUN语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58674151/

    10-11 10:24