我试图在bash脚本中使用Valve的steamcmd
包,bash脚本是需要用户输入的交互式外壳。当然,我希望能够作为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
答案 0 :(得分:1)
Docker构建过程是完全非交互的,如果您正在寻找一些输入,则需要传递build-args,并在随后的RUN命令中引用这些build-args。
但是如建议中所述,您需要以CMD
的身份运行它们,因为它会阻塞构建过程。
这里Dockerfile的入口点some 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